Я видел MediatR IPipelineBehavior<TRequest, TResponse>
и хочу использовать resequencer для упорядочения уведомлений шины событий. Аспектно-ориентированный угол очень интересен/полезен для разделения функциональности на отдельные обработчики.
Я вижу упоминание документов:
поведение конвейера совместимо только с
IRequestHandler<TRequest,TResponse>
и не может использоваться сINotificationHandler<TRequest>
.
Как можно было бы обойти это, есть ли эквивалентный конвейер поведения/преобразования для INotification
и INotificationHandler
?
Или можно использовать контейнер DI, такой как мой любимый SimpleInjector
, и зарегистрировать декораторы для переноса определенных обработчиков событий, где я хочу, чтобы повторная последовательность происходила путем переноса определенных обработчиков уведомлений?
class ResequencerEventHandler<T> : INotificationHandler<T> where T : INotification, ISequencedMessage
{
readonly IResequencer _resequencer;
readonly INotificationHandler<T> _handler;
public ResequencerEventHandler(INotificationHandler<T> handler, IResequencer resequencer)
{
_resequencer = resequencer;
_handler = handler;
}
public Task Handle(T notification)
{
_resequencer.Add(notification);
while(_resequencer.CanDequeue)
{
var packet = _resequencer.Dequeue();
_handler(packet);
}
return Task.CompletedTask;
}
}
Просто пытаюсь найти лучшее место для этого, поскольку кажется, что это можно сделать (по крайней мере, с помощью IRequests) как в MediatR
, так и в SimpleInjector
.