MediatR 是 .NET 下的一个实现消息传递的库,轻量级、简洁高效,用于实现进程内的消息传递机制。它基于中介者设计模式,支持请求/响应、命令、查询、通知和事件等多种消息传递模式。通过泛型支持,MediatR 可以智能地调度不同类型的消息,非常适合用于领域事件处理。
我们将定义一个命令、一个处理器以及一个用于发送命令的服务,演示如何发送一个命令并处理它。
1.创建.NET 8 WebAPI 标准项目,选择启用 OpenAPI 支持和使用控制器;
引用 MediatR 包到项目中。
2.具体实现
2.1 注册MediatR
在 Program.cs 文件中,我们需要注册 MediatR 服务。
2.2 创建通知类
在项目中定义了一个简单的通知类 InfoDemo,它是 INotification 接口的实现。
记录类型是一种特殊的类,主要用于表示不可变的数据类型,并提供了默认的实现来简化对象的创建和比较。
- public record InformationDemo(string Msg):这里定义了一个名为 InformationDemo 的记录类型,它接受一个字符串类型的构造函数参数 Msg。这个参数将会成为 InformationDemo 类的一个只读属性。
- INotification:这里指定了 InfoDemo 类实现了 INotification 接口。在 MediatR 中,INotification 接口用于标记一个类型作为通知(Notification)处理,这意味着这个类型将用于发送通知而不需要等待响应。
2.3 创建处理器类
创建一个通知处理器类 InformationDemoHandler,用于处理通知并返回响应。
它是 INotificationHandler
它接受一个 ILogger
这段代码实现了 INotificationHandler
当 MediatR 接收到 InformationDemo 类型的通知时,它会调用 InformationDemoHandler 的 Handle 方法来处理该通知。
2.4 创建控制器类
[ApiController]
[Route("[controller]")]
public class MediatorDemoController : ControllerBase
{
private readonly IMediator mediator;
private readonly ILogger
/// <summary>///初始化/// </summary>/// <param name="mediator"></param>/// <param name="logger"></param>public MediatorDemoController(IMediator mediator, ILogger<MediatorDemoController> logger){this.mediator = mediator;_logger = logger;}/// <summary>/// MediatorDemo 方法/// </summary>/// <returns></returns>[HttpGet(Name = "MediatorDemoMethod")]public string MediatorDemoMethod(){var information = new InformationDemo("Mediator 控制器消息 ");mediator.Publish(information);_logger.LogInformation($"{DateTimeOffset.Now} : MediatorDemoController Send: {information}.");return $"Ok";}}
3.运行展示
启动 ASP.NET Core 应用程序,通过swgger调用方法MediatorDemoMethod,可以看到消息通知和日志记录