新闻中心
C# 如何使用MediatR库 - 实现CQRS模式中的命令和查询
CQRS将操作分为命令与查询,MediatR通过中介者模式实现解耦,提升系统可维护性与扩展性,适用于复杂业务场景。

在现代C#应用程序开发中,CQRS(命令查询职责分离)模式被广泛用于提升系统可维护性和可扩展性。MediatR 是一个轻量级库,帮助我们在项目中轻松实现这一模式。它通过中介者模式将请求与处理逻辑解耦,使代码更清晰、更易于测试。
什么是CQRS?
CQRS 将数据操作分为两类:
- 命令(Commands):用于修改状态的操作,比如创建、更新或删除数据。
- 查询(Queries):仅用于读取数据,不改变任何状态。
安装与配置 MediatR
在使用之前,先通过 NuGet 安装 MediatR 和依赖注入支持包:
dotnet add package MediatRdotnet add package MediatR.Extensions.Microsoft.DependencyInjection
然后在 Program.cs 或 Startup.cs 中注册服务:
builder.Services.AddMediatR(cfg => cfg.RegisterServicesFromAssembly(typeof(Program).Assembly));这样,MediatR 就会自动发现并注册所有实现 IRequestHandler 的类。
定义命令与处理程序
以“创建用户”为例,我们定义一个命令类:
public record CreateUserCommand(string Name, string Email) : IRequest接着编写对应的处理程序:
public class CreateUserCommandHandler : IRequestHandler{
private readonly IUserRepository _userRepository;
public CreateUserCommandHandler(IUserRepository userRepository)
{
_userRepository = userRepository;
}
public async Task
{
var user = new User(request.Name, request.Email);
await _userRepository.AddAsync(user, ct);
return user.Id;
}
}
这个处理程序接收命令,执行业务逻辑,并返回新用户的 ID。
挖错网
一款支持文本、图片、视频纠错和AIGC检测的内容审核校对平台。
185
查看详情
定义查询与处理程序
对于查询,比如“根据ID获取用户信息”,我们这样定义:
public record GetUserByIdQuery(Guid Id) : IRequest处理程序从只读数据源中提取数据:
public class GetUserByIdQueryHandler : IRequestHandler{
private readonly IUserReadRepository _readRepository;
public GetUserByIdQueryHandler(IUserReadRepository readRepository)
{
_readRepository = readRepository;
}
public async Task
{
var user = await _readRepository.GetByIdAsync(request.Id, ct);
if (user == null) throw new KeyNotFoundException();
return user;
}
}
在控制器中使用 MediatR
在 ASP.NET Core 控制器中注入 ISender 接口来发送请求:
[Route("api/users")]
public class UsersController : ControllerBase
{
private readonly ISender _sender;
public UsersController(ISender sender)
{
_sender = sender;
}
[HttpPost]
public async Task
{
var userId = await _sender.Send(command);
return CreatedAtAction(nameof(GetUser), new { id = us
erId }, userId);}
[HttpGet("{id}")]
public async Task> GetUser(Guid id)
{
var query = new GetUserByIdQuery(id);
var user = await _sender.Send(query);
return Ok(user);
}
}
ISender 是 MediatR 提供的核心接口,可用于发送任意请求类型。
优点与适用场景
使用 MediatR 实现 CQRS 带来的好处包括:
- 职责清晰:每个类只做一件事。
- 便于添加横切关注点:如日志、验证、事务控制等,可通过行为(Beh*iors)统一处理。
- 可测试性强:处理程序容易单元测试。
- 适合复杂业务系统:尤其在读写频率差异大或性能要求高的场景下表现优异。
基本上就这些。掌握 MediatR 的基本用法后,你可以逐步引入管道行为、缓存机制或事件发布等功能,进一步增强系统的灵活性和健壮性。不复杂但容易忽略的是保持请求类的简洁和单一职责,避免滥用导致过度拆分。
以上就是C# 如何使用MediatR库 - 实现CQRS模式中的命令和查询的详细内容,更多请关注其它相关文章!
# 这一
# 重庆网站推广达内好吗
# 安康seo矩阵需要做吗
# 北京铁腰板营销推广中心
# 龙岩网站建设来啦
# 甘肃seo公司方案
# 贵州seo获客软件
# seo导航目录
# 湖南质量网站推广前景
# 运城营销推广招商
# 宜昌营销推广公司有哪些
# 你可以
# 就会
# cqrs模式
# 扁平化
# 器中
# 是一个
# 的是
# 与非
# 什么用
# 如何使用
# .net
# c#
# microsoft
# ai
# mediatr
相关栏目:
【
科技资讯46185 】
【
网络学院92790 】
相关推荐:
在J*a中如何开发简易电子商务商品管理系统_商品管理系统项目实战解析
小米Civi 4录制视频过暗_小米Civi 4亮度优化
零跑汽车11月交付量达70327台 实现连续9个月正增长
高德地图沿途添加点失败如何解决 高德多点规划方法
Win10如何恢复误删的快捷方式_Win10重建常用软件快捷方式
Win11怎么查看电脑配置_Win11硬件配置检测工具使用
C++如何实现一个智能指针_手动实现C++ shared_ptr的引用计数功能
俄罗斯搜索引擎Yandex指南 附2025年免登录官网入口
俄罗斯Yandex免登录入口_Yandex搜索引擎官网一键直达
html怎么运行外部js文件中的函数_运html外js文件函数法【技巧】
Python异步编程实践:使用Binance API构建实时交易数据流
在React函数组件中利用原生HTML5进行邮箱地址验证
离线运行Go语言之旅:本地部署与GOPATH配置指南
4399免费游戏网址入口 4399小游戏免费入口点开即玩
抖音极速版最新版本 抖音极速版官方下载地址
知音漫客官网漫画下载_知音漫客网页版阅读记录
Python实时数据流中的动态最值查找策略
Python字典中优雅地迭代剩余元素的方法
电脑IP地址怎么查 查看本机IP地址的几种方法
React Router v6 教程:构建认证保护的私有路由与重定向策略
漫画星球免费下拉式入口 漫画星球免费漫画在线阅读网站
Golang如何测试channel通信行为_Golang channel通信测试与分析方法
淘宝网网页版登录入口 淘宝官方网页版快捷登录
怎样使用“本地安全策略”提升Windows安全性_Secpol.msc配置指南【高手】
拼多多视频播放卡顿如何处理 拼多多视频播放优化技巧
AO3官方可用镜像 Archive of Our Own网页版最新入口
J*aScript中高效清空DOM列表元素:解决for循环中断与任务管理问题
蛙漫安全无毒 官方认证的绿色入口
一加手机拍照效果不好怎么办 一加哈苏影像调校与专业模式使用教程【高手篇】
在J*a中如何隐藏复杂性_使用门面模式组织对象交互
Win10双系统截图高效法 截屏快捷键速记【技巧】
Yandex免登录官网入口_俄罗斯Yandex搜索引擎直达链接
马斯克:Optimus 人形机器人复数形式为 Optimi
J*aScript:在map操作中高效处理空数组
初次安装JDK时环境变量如何正确配置_J*A_HOME与PATH设置规则讲解
126邮箱手机版登录官网2026_126手机邮箱免费入口最新
魅族17怎样用浏览器译外语网页_iPhone魅族17浏览器译外语网页【即时翻译】
高德地图公交到站提醒失败如何解决 高德提醒权限设置
PostgreSQL海量数据高效导入策略:Python与Django实践指南
ACG动漫视频网入口 ACG动漫*免费正版观看地址
在J*a里如何理解依赖关系的方向_依赖方向在模块结构中的作用
Node.js 中使用 node-cron 实现定时 API 数据抓取与处理
EMS快递官网app_中国邮政速递物流手机客户端
必由学登录入口 必由学官方网站在线访问链接
qq游戏跨平台入口_qq游戏多设备同步登录
电脑屏幕颜色不舒服怎么办_Windows夜间模式与色彩校准教程【护眼技巧】
优化HTML表单样式:解决输入框焦点跳动与元素间距问题
小猿搜题在线学习页面在哪_小猿搜题在线学习中心入口
Python大型XML文件高效流式解析教程
冬*霸灯泡不亮怎么办_浴霸取暖灯一盏不亮的灯座清洁修复法


2025-12-14
浏览次数:次
返回列表