第14篇 MediatR实现高效信息传递,以.net8做demo演示

MediatR 是 .NET 下的一个实现消息传递的库,轻量级、简洁高效,用于实现进程内的消息传递机制。它基于中介者设计模式,支持请求/响应、命令、查询、通知和事件等多种消息传递模式。通过泛型支持,MediatR 可以智能地调度不同类型的消息,非常适合用于领域事件处理。

我们将定义一个命令、一个处理器以及一个用于发送命令的服务,演示如何发送一个命令并处理它。

1.创建.NET 8 WebAPI 标准项目,选择启用 OpenAPI 支持和使用控制器;

image
引用 MediatR 包到项目中。

2.具体实现

2.1 注册MediatR
在 Program.cs 文件中,我们需要注册 MediatR 服务。
image
2.2 创建通知类
在项目中定义了一个简单的通知类 InfoDemo,它是 INotification 接口的实现。
image

记录类型是一种特殊的类,主要用于表示不可变的数据类型,并提供了默认的实现来简化对象的创建和比较。

public record InformationDemo(string Msg):这里定义了一个名为 InformationDemo 的记录类型,它接受一个字符串类型的构造函数参数 Msg。这个参数将会成为 InformationDemo 类的一个只读属性。
INotification:这里指定了 InfoDemo 类实现了 INotification 接口。在 MediatR 中,INotification 接口用于标记一个类型作为通知(Notification)处理,这意味着这个类型将用于发送通知而不需要等待响应。

2.3 创建处理器类
创建一个通知处理器类 InformationDemoHandler,用于处理通知并返回响应。
它是 INotificationHandler 接口的实现。
它接受一个 ILogger 类型的构造函数参数 _logger,并实现了 INotificationHandler 接口。INotificationHandler 接口是 MediatR 提供的接口,用于处理 T 类型的通知。
image

这段代码实现了 INotificationHandler 接口,并在 Handle 方法中处理 InformationDemo 类型的通知。
当 MediatR 接收到 InformationDemo 类型的通知时,它会调用 InformationDemoHandler 的 Handle 方法来处理该通知。

2.4 创建控制器类

[ApiController]
[Route("[controller]")]
public class MediatorDemoController : ControllerBase
{
private readonly IMediator mediator;
private readonly ILogger _logger;

    /// <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,可以看到消息通知和日志记录

image

posted @ 2024-09-02 19:17  似梦亦非梦  阅读(34)  评论(0编辑  收藏  举报