首页 > 其他分享 >MediatR基本使用

MediatR基本使用

时间:2023-11-12 20:56:41浏览次数:28  
标签:基本 UserPasswordChangeNotifaction MediatR Task 使用 Name Password public string

MediatR可以在进程内实现消息通信。

一、安装MediatR

程序包管理控制台执行以下代码:

dotnet add package MediatR --version 12.1.1

二、注册MediatR服务

services.AddMediatR(cfg =>
{
    cfg.RegisterServicesFromAssembly(Assembly.GetExecutingAssembly());
});

三、发送消息

await mediator.Publish(new UserPasswordChangeNotifaction(user.Name,user.Password));

UserPasswordChangeNotifaction是实现了INotifaction接口的类

 public record UserPasswordChangeNotifaction(string Name,string Password):INotification;

四、接收消息

HandelUserPasswordChange1和HandelUserPasswordChange2实现INotificationHandler接口

    public class HandelUserPasswordChange1 : INotificationHandler<UserPasswordChangeNotifaction>
    {
        public Task Handle(UserPasswordChangeNotifaction notification, CancellationToken cancellationToken)
        {
            Console.WriteLine($"HandelUserPasswordChange1:{notification.Name}修改密码为{notification.Password} {DateTime.Now}");
            return Task.CompletedTask;
        }
    }

    public class HandelUserPasswordChange2 : INotificationHandler<UserPasswordChangeNotifaction>
    {
        public Task Handle(UserPasswordChangeNotifaction notification, CancellationToken cancellationToken)
        {
            Console.WriteLine($"HandelUserPasswordChange2:{notification.Name}修改密码为{notification.Password} {DateTime.Now}");
            return Task.CompletedTask;
        }
    }

五、完整代码

ServiceCollection services = new ServiceCollection();
services.AddMediatR(cfg =>
{
    cfg.RegisterServicesFromAssembly(Assembly.GetExecutingAssembly());
});
using ServiceProvider sp = services.BuildServiceProvider();
using var scope = sp.CreateScope();
User user = new User("TestName", "111", "123456");
await user.ChangePassword("000000");
var mediator = scope.ServiceProvider.GetService<IMediator>();
await mediator.Publish(new UserPasswordChangeNotifaction(user.Name,user.Password));
Console.ReadLine();

User类代码;

public class User
{
	public int Id { get; set; }
	public string Name { get; set; }
	public string Email { get; set; }
	public string Password { get; set; }

	public User(string name,string email,string password)
	{
		Id = 1;
		Name =name;
		Email = email;
		Password = password;
	}

	public async Task ChangePassword(string pwd)
	{
		this.Password = pwd;
		await Task.CompletedTask;
	}
}

六、打印结果

image

标签:基本,UserPasswordChangeNotifaction,MediatR,Task,使用,Name,Password,public,string
From: https://www.cnblogs.com/lixiang1998/p/17827783.html

相关文章

  • 使用vue路由
    1.安装vue-router对应版本号为233344使用以下命令[email protected]或者[email protected].在main.js里面使用vue-routerimportVuefrom'vue'importAppfrom'./App.vue'importVueRouterfrom'vue-router'Vue.config.product......
  • 数字IC后端使用的各类文件及解释
    最后修改日期:2023/11/121.HDL综合(使用SDC)这里以SynopsysDesignCompiler(SDC)为例解释。工艺是SMIC130。1.1.TCL(ToolCommandLanguage)配置文件(.tcl)使用TCL对SDC过程进行配置。1.1.1.SDC参数配置下面展示了一些对SDC进行配置的tcl语句。setDC_S_DESIGN<TOP......
  • AHF安装以及使用
    AHF简介1.AHF的诞生就是为了与时俱进,让DBA们收集系统日志以及故障日志更加快捷,同时让Oracle也能够快速定位问题并提供对应的解决方案,号称是每个DBA必备工具。2.AHF现在默认绑定在DB12+以及GRID12+的RU中,同时最新的版本也可以通过patch:30166242获取,其对应RU与AHF版本历史如下:......
  • python3使用pymsql操作mysql数据库
    操作系统:Windows10_x64python版本:3.9.2pymysql版本:1.0.2MySQL版本:5.7.38 之前写过一篇关于python操作mysql数据库的文章:https://www.cnblogs.com/MikeZhang/p/pythonOptMysql20170703.html当时是基于python2.7和mysql5.5来整理的,但目前python2.7已经不再维护,主......
  • Vue使用vuex刷新页面后state数据丢失
    使用 createPersistedState做持久化安装:npminstallvuex-persistedstate--save使用:importVuefrom'vue';importVuexfrom'vuex';importcreatePersistedStatefrom'vuex-persistedstate'importnavCollapsefrom'./modules/navCol......
  • openGauss学习笔记-121 openGauss 数据库管理-设置密态等值查询-使用JDBC操作密态数据
    openGauss学习笔记-121openGauss数据库管理-设置密态等值查询-使用JDBC操作密态数据库121.1连接密态数据库连接密态数据库需要使用驱动包gsjdbc4.jar,具体JDBC连接参数参考基于JDBC开发章节介绍。JDBC支持密态数据库相关操作,需要设置enable_ce=1,示例如下。publicstaticConne......
  • 如何在“radio”输入字段中使用“required”属性
    内容来自DOChttps://q.houxu6.top/?s=如何在“radio”输入字段中使用“required”属性我只是想知道如何正确使用HTML5中的新输入属性"required"来处理单选按钮。每个单选按钮字段是否都需要像下面这样的属性,或者只有一个字段有该属性就足够了?<inputtype="radio"name="colo......
  • 在除法运算中,使用'/'和'//'有什么区别?
    内容来自DOChttps://q.houxu6.top/?s=在除法运算中,使用'/'和'//'有什么区别?使用其中一种比另一种有什么好处吗?在Python2中,它们似乎返回相同的结果:>>>6/32>>>6//32在Python3.x中,5/2会返回2.5,而5//2会返回2。前者是浮点除法,后者是取整除法,有时也称为整数除法。......
  • Sonarqube 二进制的安装与简单使用
    Sonarqube二进制的安装与简单使用背景使用容器安装sonarqube发现无法使用PG数据库尝试了很长时间没搞定想了想还是使用二进制的方式进行部署吧.下载https://binaries.sonarsource.com/Distribution/sonarqube/sonarqube-10.2.1.78527.zip这个应该是2023.11的最......
  • IDEA中使用Tomcat的两种方式:集成本地Tomcat&使用Tomcat Maven插件
    一、前言在IDEA中创建完一个MavenWeb项目,并补齐了目录以后,准备使用Tomcat时,就需要在自己创建的项目中去部署Tomcat,前文已经介绍了如何创建MavenWeb,所以这里就不多加赘述,直接讲述部署Tomcat的方法二、集成本地Tomcat1.将本地Tomcat集成到Idea这种方法比较复杂,但是非常适用于tomca......