为了增加对比性 我也新建了一个传统的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 等等 。
文章插图
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> 继承该类不返回
Notification 消息的定义很简单,只需要让你的类继承一个空接口 INotification 即可 。而处理程序则实现 INotificationHandler<T> 接口的 Handle 方法
PASS:如果你想成为一个成功的人,那么请为自己加油,让积极打败消极 , 让高尚打败鄙陋,让真诚打败虚伪,让宽容打败褊狭,让快乐打败忧郁,让勤奋打败懒惰 , 让坚强打败脆弱,只要你愿意 , 你完全可以做最好的自己 。
推荐阅读
- 常用Python库整理
- 加拿大高中排名 加拿大高中排名
- 定位java程序中占用cpu最高的线程堆栈信息
- jk罗琳中文官网 jk罗琳
- PE管十大品牌有哪些 中国pe管道十大品牌
- SpringCloudAlibaba 微服务组件 Nacos 之配置中心源码深度解析
- 幻塔大眼萌仔怎么获取
- 《正义联盟》中超人是怎么死的
- 正义联盟中超人什么时候死的(正义联盟死去的英雄)
- 王者荣耀娜可露露前尘镜中文语音包怎么设置