如何注册MediatR后处理器

时间:2017-02-17 19:59:13

标签: .net-core mediatr

我想在MediatR中尝试新的管道功能:https://github.com/jbogard/MediatR/wiki/Behaviors

我尝试了以下内容,但没有执行

services.AddMediatR();                    
services.AddTransient(typeof(IRequestPostProcessor<,>), typeof(PostHandler<,>));

我错过了什么?

2 个答案:

答案 0 :(得分:3)

您需要注册与后处理器相关联的行为,例如this unit test节目。

您的注册码如下:

services.AddMediatR();
services.AddTransient(typeof(IRequestPostProcessor<,>), typeof(PostHandler<,>));
services.AddTransient(typeof(IPipelineBehavior<,>), typeof(RequestPostProcessorBehavior<,>));

behavior将获得您注册并执行它们的所有后处理器。

修改

在关于后处理器运行两次的评论之后,我看了一下在ASP.NET Core内置DI容器中注册MediatR的代码,结果发现IRequestPreProcessor<TRequest, TResponse>和{{的实例1}}会自动注册,您可以看到here。让它们在管道中运行还剩下的工作就是注册相关的行为。因此必要的注册是:

IRequestPostProcessor<TRequest, TResponse>

答案 1 :(得分:0)

在上面的评论中,我遇到了与Larsi相同的问题。我的代码看起来像这样

services.AddScoped<IPipelineBehavior<AddMessageRequest, MessageResponse>, RequestPostProcessorBehavior<AddMessageRequest, MessageResponse>>();

,但是该行为仍然执行了两次。我的解决方案是简单地不手动注册,好像现在已经处理了注册。

就我而言,services.AddMediatR(Assembly.GetExecutingAssembly());就足够了。

如果有人可以解释为什么会这样,那就太好了。