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;
}
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 记一次.NET内存居高不下排查解决与启示