我想在MediatR中尝试新的管道功能:https://github.com/jbogard/MediatR/wiki/Behaviors
我尝试了以下内容,但没有执行
services.AddMediatR();
services.AddTransient(typeof(IRequestPostProcessor<,>), typeof(PostHandler<,>));
我错过了什么?
答案 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());
就足够了。
如果有人可以解释为什么会这样,那就太好了。