如何将MediatR PublishStrategy添加到现有项目中

3
现在我像这样使用MediatR通知:
private readonly IMediator _requestsRouter; // from constructor injection 

 OrderCreatedEvent orderCreatedEvent = new OrderCreatedEvent(x,y,z);
 await _requestRouter.Publish(orderCreatedEvent); 

我想把默认的PublishStrategy更改为ParallelNoWait = 3, 问题:如何通过nuget扩展MediatR功能,使用来自示例中的MediatR PublishStrategies?
我知道可以下载MediatR源代码,将其与MediatR.Examples.PublishStrategies中的代码合并,并构建自己的库,但也许还有另一种“快速”的方法?
3个回答

2

您不能再设置任何发布策略,而是需要执行以下操作:

  1. 使用MediatR DI扩展包
  2. 创建一个新的自定义类,继承自Mediator,重写PublishCore方法并添加任何所需行为。默认情况下,实现是每个处理程序的foreach和await。
  3. 在startup.cs中指定实现类型

services.AddMediatR(opt => opt.Using< myCustomMediatorType >(), typeof(Program));


请注意,以上内容涉及IT技术。

2
您可以通过创建子类并定义自己的DefaultStrategy来扩展Publish
public class MyPublisher : Publisher
{
    public MyPublisher(ServiceFactory serviceFactory) : base(serviceFactory)
    {
        DefaultStrategy = PublishStrategy.ParallelNoWait;
    }
}

通过调用基础构造函数并覆盖初始化DefaultStrategy成员的值,您可以使Mediatr的源代码保持完整。

当然,您需要在DI容器中注册自定义的MyPublisher而不是Publisher

services.AddSingleton<MyPublisher>();

谢谢!但是我是否仍然需要添加代码并从samples/MediatR.Examples.PublishStrategies编译,以使用PublishStrategy.ParallelNoWait - Nick
同时,在命名空间MediatR中,我没有DefaultStrategy。 (using MediatR;) - Nick

0

如果预期解决方案是“点火并忘记”,那么更简单的解决方案就是在发布时不等待。这也更好地表达了您代码的意图,因为使用await,但跳过它有点误导。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接