如何注册 MediatR 后处理器

Lar*_*rsi 3 .net-core mediatr

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

我尝试了以下操作,但没有执行

services.AddMediatR();                    
services.AddTransient(typeof(IRequestPostProcessor<,>), typeof(PostHandler<,>));
Run Code Online (Sandbox Code Playgroud)

我错过了什么?

Mic*_*iey 8

您需要注册与后处理器相关的行为,如本单元测试所示。

您的注册码如下所示:

services.AddMediatR();
services.AddTransient(typeof(IRequestPostProcessor<,>), typeof(PostHandler<,>));
services.AddTransient(typeof(IPipelineBehavior<,>), typeof(RequestPostProcessorBehavior<,>));
Run Code Online (Sandbox Code Playgroud)

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

编辑

在对后处理器运行两次发表评论后,我查看了在 ASP.NET Core 内置 DI 容器中注册 MediatR 的代码,结果发现IRequestPreProcessor<TRequest, TResponse>和 的实例IRequestPostProcessor<TRequest, TResponse>会自动注册,如您在此处看到的。要让它们在管道中运行,剩下要做的就是注册相关的行为。所以必要的注册是:

services.AddMediatR();
services.AddTransient(typeof(IPipelineBehavior<,>), typeof(RequestPostProcessorBehavior<,>));
Run Code Online (Sandbox Code Playgroud)

  • 是的,我编辑了我的答案。我发现注册处理器而不是相关行为很奇怪。有时间我可能会在 GitHub 上打开一个问题。 (2认同)