INotificationHandler:INotification 多點傳播消息傳輸
多點傳播消息傳輸,也就是一對多的消息傳遞,一個消息對應多個消息處理。其通過INotification來抽象多點傳播消息,對應的消息處理類型為INotificationHandler。
IRequestHandler:單點傳播消息傳輸,也就是一對一的消息傳遞,一個消息對應一個消息處理。其通過IRequest來抽象單點傳播消息,用IRequestHandler進行消息處理。
感興趣的可以了解下:
MediatR 知多少: https://www.jianshu.com/p/583bcba352ec
-
安裝MediatR
通過nuget的ui來安裝下面這兩個包:
2.在Startup類中配置MediatR
下一步,在Startup類中,在ConfigureServices方法中添加如下代碼:
services.AddMediatR(Assembly.GetExecutingAssembly());
3.實作INotification
定義Class,引用INotification
public class TESTUser : INotification
{
public string Username { get; set; }
public string Password { get; set; }
}
建立三個處理程式逐個執行,以完成他們的工作。這些都是從INotificationHandler繼承下來的
public class TESTUserHandler : INotificationHandler<TESTUser>
{
public Task Handle(TESTUser notification, CancellationToken cancellationToken)
{
//Save to log
Debug.WriteLine(" **** Save user in database *****");
return Task.FromResult("");
}
}
public class LogHandler : INotificationHandler<TESTUser>
{
public Task Handle(TESTUser notification, CancellationToken cancellationToken)
{
//Save to log
Debug.WriteLine(" **** User save to log *****");
return Task.FromResult("");
}
}
public class EmailHandler : INotificationHandler<TESTUser>
{
public Task Handle(TESTUser notification, CancellationToken cancellationToken)
{
//Send email
Debug.WriteLine(" **** Email sent to user *****");
return Task.FromResult("");
}
}
建立Controller引用IMediator實作對應方法,調用Publish方法實作
[Route("api/[controller]")]
[ApiController]
public class HomeController : ControllerBase
{
private readonly IMediator _mediator;
public HomeController(IMediator mediator)
{
_mediator = mediator;
}
[HttpGet]
public ActionResult Register()
{
TESTUser user = new TESTUser() { Username = "test1", Password = "test2" };
_mediator.Publish(user);
return RedirectToAction("");
}
}
-
實作IRequestHandler
定義Class,引用IRequestHandler,定義傳回值
public class TESTUser2 : IRequest<bool>
{
public string Username { get; set; }
public string Password { get; set; }
}
public class TESTUser2Handler : IRequestHandler<TESTUser2, bool>
{
public Task<bool> Handle(TESTUser2 request, CancellationToken cancellationToken)
{
// save to database
return Task.FromResult(true);
}
}
建立Controller引用IMediator實作對應方法,調用Send方法實作
_mediator.Send(user);
搭建架構參考 ASP.NET Core中使用MediatR實作指令和中介者模式:
https://blog.csdn.net/qin_yu_2010/article/details/83511366
英文原文:https://www.c-sharpcorner.com/article/command-mediator-pattern-in-asp-net-core-using-mediatr2/
源代碼下載下傳:https://download.csdn.net/download/u010194236/12673908
.NetCore MVC轉換成 .NetCore WebApi:
https://www.cnblogs.com/licm/p/12718604.html
PS:源代碼沒啥東西能别下就别下拉代碼已經都貼到上邊了,贈送一張女神圖檔