财经网站源码 织梦,wordpress缓存插件对比,设计网站与建设,网站能需要怎么做才不会被攻击MediatR 是一个 中介者模式 的.NET开源实现#xff0c; 中介者模式 管控了一组对象之间的相互通讯并有效的减少了对象之间错综复杂的相互依赖#xff0c;在 中介者模式 中#xff0c;一个对象不需要直接和另一个对象进行通讯#xff0c;而是通过 中介者 进行转达#xff0… MediatR 是一个 中介者模式 的.NET开源实现 中介者模式 管控了一组对象之间的相互通讯并有效的减少了对象之间错综复杂的相互依赖在 中介者模式 中一个对象不需要直接和另一个对象进行通讯而是通过 中介者 进行转达这篇文章将会讨论如何在 ASP.Net Core 中使用 MediatR 。安装 MediatR 在 ASP.Net Core 中使用 MediatR 非常简单你只需要通过 Nuget 安装如下两个包即可。MediatRMediatR.Extensions.Microsoft.DependencyInjection当前最新的版本为 9.0.0如下图所示配置 MediatR 一旦上面的两个 Nuget 包安装到项目之后接下来就可以在 Startup 类中进行 MediatR 的配置了做法就是在 ConfigureServices() 方法中将 MediaR 注入到 IServiceCollection 容器中如下代码所示// This method gets called by the runtime. Use this method to add services to the container.public void ConfigureServices(IServiceCollection services){services.AddMediatR(typeof(Startup));services.AddControllers();}使用 MediaR 处理 通知事件 MediatR 支持两种消息模式。Request / Response 模式Notification 模式这篇文章我们将会讨论 Notification接下来创建一个实现 INotification 接口的类如下代码所示public class LogEvent : INotification{public string message;public LogEvent(string message){this.message message;}}为了能够处理 LogEvent 事件还需再创建一个实现 INotificationHandler 接口的类如下代码所示public class FileNotificationHandler : INotificationHandlerLogEvent{public Task Handle(LogEvent notification, CancellationToken cancellationToken){string message notification.message;Log(message);return Task.FromResult(0);}private void Log(string message){//Write code here to log message(s) to a text fileDebug.WriteLine(Write code here to log message(s) to a text file);}}public class DBNotificationHandler : INotificationHandlerLogEvent{public Task Handle(LogEvent notification, CancellationToken cancellationToken){string message notification.message;Log(message);return Task.FromResult(0);}private void Log(string message){//Write code here to log message(s) to the databaseDebug.WriteLine(Write code here to log message(s) to the database);}}依赖注入 IMediator 刚才我已经为了 LogEvent 创建了两个处理 handler 类接下来就可以通过 依赖注入 的方式将其注入到 Controller 中如下代码所示[ApiController][Route([controller])]public class WeatherForecastController : ControllerBase{private readonly ILoggerWeatherForecastController _logger;private readonly IMediator _mediator;public WeatherForecastController(IMediator mediator, ILoggerWeatherForecastController logger){this._mediator mediator;this._logger logger;}}最后我们可以在 Action 中通过 publish 发布消息如下代码所示[HttpGet]public IEnumerableWeatherForecast Get(){_mediator.Publish(new LogEvent(Hello World));}值得注意的是执行程序后将会调用上面的 publish 方法继而触发 DBNotificationHandler 和 FileNotificationHandler 的 Handle 方法如下图所示中介者模式 是一种行为式的设计模式它可以有效地管控多个对象之间的交互方式并有效的减少交互双方的依赖关系刚好 MediatR 就是这样一款成品的 中介者模式 的实现关于 MediatR 的 request/response 模式我会在后面的文章中和大家细说。译文链接https://www.infoworld.com/article/3393974/how-to-use-mediatr-in-aspnet-core.html