问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

MediatR实现高效信息传递,以.NET 8做demo演示

创作时间:
作者:
@小白创作中心

MediatR实现高效信息传递,以.NET 8做demo演示

引用
1
来源
1.
https://www.cnblogs.com/chenshibao/p/18393289

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类型的构造函数参数 _logger,并实现了 INotificationHandler接口。INotificationHandler接口是 MediatR 提供的接口,用于处理 T 类型的通知。

这段代码实现了 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,可以看到消息通知和日志记录

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号