【发布时间】:2020-03-11 16:04:57
【问题描述】:
我已经看到 MediatR IPipelineBehavior<TRequest, TResponse> 并希望使用重新排序器来整理事件总线通知。面向方面的角度非常有趣/有助于将功能拆分为单独的处理程序。
我可以看到文档提到:
管道行为只兼容
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;
}
}
只是想找出执行此操作的最佳位置,因为在 MediatR 和 SimpleInjector 中似乎都可以执行此操作(至少使用 IRequests)。
【问题讨论】:
-
好的,谢谢 Steven,如果您想将其作为答案弹出,这正是我正在寻找的答案,并将相应地标记。
标签: c# simple-injector mediatr