MediatR 用于 C# (.NET):完整指南与示例

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

什么是 MediatR,为什么需要它?



MediatR 是一个轻量级但功能强大的 .NET 库,实现了 中介者(Mediator) 设计模式。在软件开发领域,尤其是在基于 CQRS(命令查询职责分离)架构构建的应用程序中,MediatR 已成为事实上的标准。



为什么需要它?

在经典架构中,当一个类(例如控制器)想要在另一个类(例如服务)中执行操作时,它必须知道该服务的存在及其接口。这会产生紧耦合(tight coupling)。如果您想在调用服务之前添加日志记录、验证或缓存,则必须修改控制器代码或创建装饰器,这会使维护变得复杂。



MediatR 通过引入中介者的概念解决了这个问题。系统组件(例如控制器)不再直接通信。相反,它们通过 MediatR 发送请求(Request)或命令(Command)。该库会自动查找并调用相应的处理程序(Handler)。



使用 MediatR 的主要优势:

  • 松耦合(Loose Coupling): 请求发送者完全不了解接收者。它只知道请求的类型。
  • 单一职责原则(SRP): 每个处理程序只负责一个操作(例如,“创建用户”、“获取订单列表”)。
  • 简化 CQRS: MediatR 非常适合分离命令(改变状态)和查询(读取状态)。
  • 管道行为(Pipeline Behaviors): 您可以轻松添加横切关注点功能(日志记录、验证、事务),而无需修改处理程序代码。
  • 可测试性: 可以轻松地隔离测试处理程序,并且可以轻松替换其实现。


安装 MediatR

MediatR 通过 NuGet 分发。可以通过以下几种方式安装:



1. 通过 .NET CLI(推荐方式)

在项目根目录打开终端并执行以下命令:

dotnet add package MediatR

如果您使用 ASP.NET Core,还需要用于依赖注入(DI)的包:

dotnet add package MediatR.Extensions.Microsoft.DependencyInjection


2. 通过 Package Manager Console(Visual Studio)

Install-Package MediatRInstall-Package MediatR.Extensions.Microsoft.DependencyInjection


3. 通过 NuGet Package Manager UI

在 Visual Studio 中:工具 → NuGet 包管理器 → 管理解决方案的 NuGet 程序包...。搜索“MediatR”并安装这两个包。



快速入门与代码示例

让我们创建一个简单的示例:向用户发送问候。



步骤 1:创建项目

创建一个新的控制台项目或 ASP.NET Core Web API 项目。



步骤 2:定义请求(Request)

创建一个表示请求的类。它必须实现 IRequest<TResponse> 接口,其中 TResponse 是返回值的类型。

using MediatR;

public class PingRequest : IRequest<string>{ public string Message { get; set; } = "Ping";}


步骤 3:创建处理程序(Handler)

创建一个实现 IRequestHandler<TRequest, TResponse> 接口的类。

using MediatR;using System.Threading;using System.Threading.Tasks;

public class PingHandler : IRequestHandler<PingRequest, string>{ public Task<string

推荐