做娃衣的布料去哪个网站,公司图标设计logo,深圳好网民名单出炉,中山网站建设是什么前言ASP.NET Core的Middleware#xff08;中间件#xff09;就是使用了管道模式#xff1a;Request#xff08;请求#xff09;在管道中传递#xff0c;依次经过管道中的每一个MiddleWare进行处理。MiddleWare就像一层层的“滤网”#xff0c;过滤所有的请求和响应。这种… 前言ASP.NET Core的Middleware中间件就是使用了管道模式Request请求在管道中传递依次经过管道中的每一个MiddleWare进行处理。MiddleWare就像一层层的“滤网”过滤所有的请求和响应。这种模式的好处在于分离关注点。比如验证用户、记录访问日志可以将这些任务分解到不同MiddleWare中互相解耦。既然ASP.NET Core已经实现了管道模式为什么还要在业务层实现一遍呢原因我觉得可以分为2方面考虑与顶级框架解耦不能保证应用程序代码始终运行在ASP.NET Core下如果将业务迁移到WPF记录访问日志这类放在管道中的功能还是需要实现同时支持不同来源请求请求可能来自于Web API也可能来自于Windows Service定时调用但业务层处理逻辑应保持一样因此ASP.NET Core框架应该只用于接收输入和返回输出而在业务层实现管道模式。定义API的最佳实践在《定义API的最佳实践MediatR类库实现Controller方法将业务逻辑和Controller进行隔离。示例代码如下[HttpGet]
public async Taskstring Demo([FromQuery] DemoQuery request)
{return await _mediator.Send(request);
}public class DemoQuery : IRequeststring
{public string Name { get; set; }
}public class DemoQueryHandler : IRequestHandlerDemoQuery, string
{ public async Taskstring Handle(DemoQuery request, CancellationToken cancellationToken){Console.WriteLine(DemoQueryHandler执行);return request.Name;}
}而MediatR不仅仅是一个简单的中介模式实现它还提供了Behaviors的概念Behaviors非常类似于ASP.NET Core中的MiddleWare可以让我们实现管道模式。管道实现要定义Behaviors我们需要实现IPipelineBehavior接口示例代码如下:public class FirstPipelineBehaviorTRequest, TResponse: IPipelineBehaviorTRequest, TResponse
{public async TaskTResponse Handle(TRequest request, CancellationToken cancellationToken, RequestHandlerDelegateTResponse next){Console.WriteLine(FirstPipelineBehavior执行中);var response await next();Console.WriteLine(FirstPipelineBehavior执行完成);return response;}
}和MiddleWare类似调用next()可以将请求向下传递。接着在Startup.cs中注册管道:services.AddMediatR(typeof(Startup));
services.AddTransient(typeof(IPipelineBehavior,), typeof(FirstPipelineBehavior,));
services.AddTransient(typeof(IPipelineBehavior,), typeof(SecondPipelineBehavior,));
services.AddTransient(typeof(IPipelineBehavior,), typeof(ThirdPipelineBehavior,));访问API可以看到管道可以在IRequestHandler执行之前和之后执行代码并且处理顺序和注册顺序相同结论通过本文我们了解到通过MediatR提供的Behaviors功能不依赖ASP.NET Core框架可以在业务层实现管道模式。如果你觉得这篇文章对你有所启发请关注我的个人公众号”My IO“记住我