【问题标题】:How to add MediatR PublishStrategy to existing project如何将 MediatR PublishStrategy 添加到现有项目
【发布时间】:2019-12-13 10:11:18
【问题描述】:

现在我像这样使用 MediatR 通知:

private readonly IMediator _requestsRouter; // from constructor injection 

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

我想将默认 PublishStrategy 更改为 ParallelNoWait = 3,

问题:如何使用来自sample 的 MediatR PublishStrategies 从 nuget 扩展 MediatR 功能?

我知道我可以下载 MediatR 源代码,从 MediatR.Examples.PublishStrategies 添加代码并构建我自己的库,但也许还有另一种“快速”方式?

【问题讨论】:

    标签: c# .net-core mediatr


    【解决方案1】:

    您可以扩展 Publish 创建一个子类来定义您自己的 DefaultStrategy

    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 吗?
    • 我也没有 DefaultStrategy 在命名空间 MediatR (using MediatR;)
    【解决方案2】:

    如果预期的解决方案是“一劳永逸”,那么当您发布时,无需等待更简单的解决方案。这也更好地表达了代码的意图,因为有等待,但跳过有点误导。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-12-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-15
      • 2017-07-13
      • 2013-08-18
      相关资源
      最近更新 更多