Asp.Net Core6.0中MediatR的应用CQRS( 六 )

为了增加对比性 我也新建了一个传统的services来新增Cus
using MediatApi.Entity;namespace MediatApi.services{    public interface ICusService    {        Task<int> AddAsync();    }    public class CusService : ICusService    {        private readonly testContext _db;        public CusService(testContext db)        {            _db = db;        }        public async Task<int> AddAsync()        {            Cu c = new()            {                Name = "wyy",                Age = 18            };            _db.Cus.Add(c);           return  await _db.SaveChangesAsync();        }    }}控制器里面两个新增 一个走MediatRy个走传统的Service
 /// <summary>        /// 创建用户_mediator        /// </summary>        /// <param name="cmd"></param>        /// <returns></returns>        [HttpPost]        public async Task<int> CusCreateMediator([FromBody] CusCreateCommand cmd)=> await _mediator.Send(cmd,HttpContext.RequestAborted);        /// <summary>        /// 创建用户 Service        /// </summary>        /// <returns></returns>        [HttpPost]        public async Task<int> CusCreateService() => await _cusService.AddAsync();运行可以发现 传统的Service就不会执行 。MediatR 中具有与此类似的管线机制,可通过泛型接口 IPipelineBehavior<,>注册,使得我们在 Handle 真正执行前或后可以额外做一些事情:记录日志、对消息做校验、对数据做预处理数据库事务、记录性能较差的Handler 等等 。

Asp.Net Core6.0中MediatR的应用CQRS

文章插图
8、总结MediatR的用法
a.IRequest、IRequest<T> 只有一个单独的Handler执行
b.Notification , 用于多个Handler 。
对于每个 request 类型,都有相应的 handler 接口:
  • IRequestHandler<T, U> 实现该接口并返回 Task<U>
  • RequestHandler<T, U> 继承该类并返回 U
  • IRequestHandler<T> 实现该接口并返回 Task<Unit>
  • AsyncRequestHandler<T> 继承该类并返回 Task
  • RequestHandler<T> 继承该类不返回
NotificationNotification 就是通知,调用者发出一次,然后可以有多个处理者参与处理 。
Notification 消息的定义很简单,只需要让你的类继承一个空接口 INotification 即可 。而处理程序则实现 INotificationHandler<T> 接口的 Handle 方法
PASS:如果你想成为一个成功的人,那么请为自己加油,让积极打败消极 , 让高尚打败鄙陋,让真诚打败虚伪,让宽容打败褊狭,让快乐打败忧郁,让勤奋打败懒惰 , 让坚强打败脆弱,只要你愿意 , 你完全可以做最好的自己 。

推荐阅读