如何为 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
的通用实现即可。
我正在使用 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
的通用实现即可。