首页 > 其他分享 >MediatR实现高效信息传递,以.net8做demo演示

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

时间:2024-09-02 19:14:37浏览次数:13  
标签:InformationDemo MediatR mediator demo net8 接口 通知 logger

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

标签:InformationDemo,MediatR,mediator,demo,net8,接口,通知,logger
From: https://www.cnblogs.com/chenshibao/p/18393289

相关文章

  • 【工程应用十二】Bayer图像格式中Hamilton-Adams及Zhang Wu 基于LMMSS算法的Demosaic
    Demosaic,中文直接发翻译为去马赛克,但是其本质上并不是去除马赛克,这让很多第一次接触这个名词或者概念的人总会想的更多。因此,一般传感器在采集信息时一个位置只采集RGB颜色中的一个通道,这样可以减少采集量,降低成本,由于人的视觉对绿色最为敏感,所以一般情况下,绿色分量会比红色......
  • Havoc的demon开发环境配置(使用vscode二开beacon)
    二开havoc需要看一下之前的几篇文章,感谢chatAI让我少吃了很多苦头,二开beacon(demon)环境终于搭建好了,之前想过使用ollvm编译demon,以便于源码级的混淆,但是试了以下,llvm能让人吃更多苦头,我没有测试过demon能不能使用llvm编译,因为llvm本身就很难编译成功,以至于我不想在llvm上花费任......
  • .net8 aot 发布
    AOT是AheadOfTime的缩写,指运行前编译,是两种程序的编译方式之一,与JIT(Just-in-time)相对.net 对操作系统的支持情况操作系统.NET8(体系结构).NET6(体系结构)Windows11✔️x64、x86、Arm64✔️x64、Arm64WindowsServer2022✔️x64、x86✔️x64、x86Windows10版本......
  • libwebsocket demo以及遇到的坑。
    借鉴的 https://blog.csdn.net/qq_19004627/article/details/88737411坑1:openssl报错:ipaddressmismatch(preverify_ok=0;err=64;depth=0),不确定是不是自己生成的证书在无网情况下是不是不可用(开发电脑无法连互联网),暂时屏蔽了openssl相关的代码。坑2:这个文章的client的代码中......
  • 基于springboot的grpc服务端demo
    1.Javamaven配置点击查看代码<?xmlversion="1.0"encoding="UTF-8"?><projectxmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="h......
  • 【SQL练习】demo1
    为了适应技术发展的需求,SQL标准于2016年增加了以下JSON功能:JSON对象的存储与检索。将JSON对象表示成SQL数据。将SQL数据表示成JSON对象。如今,主流关系型数据库都增加了原生JSON数据类型和相关函数的支持,使得我们可以将SQL的强大功能与JSON文档存储的灵......
  • .NET8 接入qwen2大语言模型
    前言dotnet8项目接入qwen大模型,这个主要用到了大模型管理工具叫做ollama有了它,接入大模型soeasy。使用ollama可以接入很多大模型,详见:https://ollama.com/library环境vs2022previewdotent8Windows10企业版1、下载ollamahttps://github.com/ollama/ollama安装完成......
  • 一起来学习.net core程序使用中介者模式:MediatR插件
    一起来学习.netcore程序使用中介者模式:MediatR插件     中介者模式是一种常见的设计模式,旨再降低程序的耦合性,因为传统的三层模式层层之间需要显示的调用,必须上层依赖下层,耦合性很高,为了解耦,将所有的指令单独放在一个位置处理,其他位置均通过这个位置来间接的调用,从......
  • ASP.NET8 中使用 AutoMapper 配置
    ASP.NET8中使用AutoMapper配置菜鸟新人学习.NET记录,找到了个类似Springboot框架中的Mapstruct的工具,就是配置资料不是很多,踩了蛮多坑的。假设现在有一个USER类,我想将它转换成USERVO把其中的pwd字段給隐藏掉,通过AutoMapper可以不用每个字段赋值创建对象这样子,直接上......
  • ASP.Net8 中使用 JWT 鉴权的异常处理
    .Net8中使用JWT鉴权的异常处理自己搭了个学习Demo想用JWT給后端做鉴权,结果一直报一些奇奇怪怪的异常,最主要是和写业务代码不一样,因为用了官方提供的包很难排查出问题所在,这次有点像以前学Spring的时候,也是一点一点摸着石头过河,最后还是同事帮忙看出来问题在哪的。问题1:I......