MediatR是C#中实现CQRS最轻量主流的选择,以“请求-响应”模型分离命令与查询,提升可测性与扩展性;它作为进程内消息总线自动路由请求到唯一处理器,不强制接口,需自行组合事务、缓存等能力。

在C#中实现CQRS模式,MediatR是最轻量、最主流的选择之一。它不强制你写一堆接口和基类,而是用“请求-响应”模型自然地把命令(Command)和查询(Query)分开,让业务逻辑更清晰、可测试性更强、扩展更灵活。
一、理解CQRS与MediatR的核心分工
CQRS(Command Query Responsibility Segregation)本质是把“改数据”和“读数据”彻底拆开:命令负责修改状态(如创建订单、更新用户),查询只负责返回数据(如获取用户列表、查订单详情)。MediatR不是CQRS框架,而是一个进程内消息总线——它帮你把请求(IRequest)发给唯一对应的处理器(IRequestHandler),自动完成路由、依赖注入和生命周期管理。
关键点:
- 一个请求类型(比如
CreateUserCommand)只能有一个处理器; - 查询和命令都用
IRequest<tresponse></tresponse>统一建模,是否修改数据库由你决定; - MediatR本身不处理事务、缓存或事件发布,这些需你自行组合(比如配合Entity Framework Core + IUnitOfWork + IDomainEvent)。
二、快速上手:三步接入MediatR
以.NET 6+项目为例(控制台或Web API均可):
1. 安装包
通过NuGet安装:MediatR(核心库)MediatR.Extensions.Microsoft.DependencyInjection(集成ASP.NET Core DI)
2. 注册服务
在Program.cs中添加:
builder.Services.AddMediatR(cfg => cfg.RegisterServicesFromAssembly(typeof(Program).Assembly));
登录后复制
这会自动扫描当前程序集下所有实现了IRequestHandler或INotificationHandler的类并注册。
3. 写一个查询示例
定义查询请求:
标签: 处理器 编码 ai 路由 microsoft c# .net
还木有评论哦,快来抢沙发吧~