/
vshmidt
/
masstransit
Обзор
Документация
Войти
/
vshmidt
/
masstransit
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
Безопасность
develop
src/MassTransit/Initializers/HeaderInitializers/SetHeaderInitializer.cs
49 строк
2 KB
Chris Patterson
Integration of all external packages into MassTransit, split out into Abstractions, Middleware, and the core MassTransit assembly.
22 янв 2022, 18:24
22 янв 2022, 18:24
b5b4f50
Код
Авторство
О чём код?
namespace MassTransit.Initializers.HeaderInitializers { using System; using System.Threading.Tasks; /// <summary> /// Set a header to a constant value from the input /// </summary> /// <typeparam name="TMessage"></typeparam> /// <typeparam name="TInput"></typeparam> /// <typeparam name="THeader">The header type</typeparam> public class SetHeaderInitializer<TMessage, TInput, THeader> : IHeaderInitializer<TMessage, TInput> where TMessage : class where TInput : class { readonly string _headerName; readonly IPropertyProvider<TInput, THeader> _provider; public SetHeaderInitializer(string headerName, IPropertyProvider<TInput, THeader> provider) { if (headerName == null) throw new ArgumentNullException(nameof(headerName)); _headerName = headerName; _provider = provider; } public Task Apply(InitializeContext<TMessage, TInput> context, SendContext sendContext) { Task<THeader> propertyTask = _provider.GetProperty(context); if (propertyTask.IsCompleted) { sendContext.Headers.Set(_headerName, propertyTask.Result); return Task.CompletedTask; } async Task ApplyAsync() { var value = await propertyTask.ConfigureAwait(false); sendContext.Headers.Set(_headerName, value); } return ApplyAsync(); } } }