如何为 ASP.NET 核心注册和使用 MediatR 管道处理程序?

How do I register and use a MediatR pipeline handler, for ASP.NET Core?

我正在使用 ASP.NET Core、最新的 MediatR 和 MediatR extension for Core's DI

我正在尝试设置带有验证的管道,using the official blog post. The example is here

我不明白如何 register/use 该管道 class。另一个 blog post 展示了如何执行此操作,但我认为它适用于 AutoFac。

如何为内置容器执行此操作?

您提到的帖子使用 MediatR 2.x。
MediatR 3.0 发布不久,已经built-in 支持流水线。我建议您阅读 associated documentation.

简而言之,MediatR 现在公开了一个 IPipelineBehavior<TRequest, TResponse>,您在容器中注册的实例将在构造处理程序时由 MediatR 自动发现。

这是 ASP.NET 核心中的样子:

public class MyRequest : IRequest<string>
{
}

public class MyRequestHandler : IRequestHandler<MyRequest, string>
{
    public string Handle(MyRequest message)
    {
        return "Hello!";
    }
}

public class TracingBehavior<TRequest, TResponse> : IPipelineBehavior<TRequest, TResponse>
{
    public async Task<TResponse> Handle(TRequest request, RequestHandlerDelegate<TResponse> next)
    {
        Trace.WriteLine("Before");
        var response = await next();
        Trace.WriteLine("After");

        return response;
    }
}

非常简单,一个请求、一个处理程序和一个执行某些操作的行为 "logging"。

注册也很简单:

var services = new ServiceCollection();
services.AddMediatR(typeof(Program));
services.AddTransient(typeof(IPipelineBehavior<,>), typeof(TracingBehaviour<,>));
var provider = services.BuildServiceProvider();

var mediator = provider.GetRequiredService<IMediator>();

var response = await mediator.Send(new MyRequest());

只需将 open-generic TracingBehavior 注册为 IPipelineBehavior 的通用实现即可。