Я видел MediatR IPipelineBehavior<TRequest, TResponse>
и собираюсь использовать средство повторного секвенсора для упорядочения уведомлений о событиях. Аспектно-ориентированный угол очень интересен / полезен для разделения функций на отдельные обработчики.
Я вижу упоминание в документации:
конвейерное поведение совместимо только с IRequestHandler<TRequest,TResponse>
и может не может быть использован с INotificationHandler<TRequest>
.
Что бы обойти это, если есть эквивалентный конвейер поведения / преобразования для INotification
и INotificationHandler
?
Или один использует DI-контейнер, такой как мой любимый SimpleInjector
и регистратор декораторов, чтобы обернуть определенные c обработчики событий, где я хочу, чтобы повторное упорядочение происходило путем обертывания указанных c обработчиков уведомлений?
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
.