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,可以看到消息通知和日志记录
标签:InformationDemo,MediatR,mediator,demo,net8,接口,通知,logger From: https://www.cnblogs.com/chenshibao/p/18393289