我正在使用ASP.NET Core,最新的MediatR和MediatR
extension for Core’s DI.
我正在尝试建立一个带有验证的管道,using the official blog post.示例is here.
我不明白如何注册/使用该管道类.另一个blog post显示了如何做到这一点,但我认为它适用于AutoFac.
我如何为内置容器执行此操作?
解决方法
你提到的帖子使用MediatR 2.x.
MediatR 3.0不久前发布,并且内置了对管道的支持.我建议你阅读 associated documentation.
MediatR 3.0不久前发布,并且内置了对管道的支持.我建议你阅读 associated documentation.
简而言之,MediatR现在公开了一个IPipelineBehavior< TRequest,TResponse>,并且在构建处理程序时,MediatR会自动发现您在容器中注册的实例.
这是ASP.NET Core中的样子:
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; } }
非常简单,请求,处理程序和执行某些“日志记录”的行为.
注册也非常简单:
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());
这只是将开放式通用TracingBehavior注册为IPipelineBehavior的通用实现.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。