Mediator 开源项目实战指南
项目介绍
Mediator 是一个高效的 .NET 实现的中介者模式库,利用了 .NET 5 引入的源码生成器特性。它设计的目标是提供与 MediatR 类似的 API 使用体验,但通过源码生成优化性能,并支持AOT(预先编译),旨在解决跨切面关注点(如日志记录、度量收集)以及因大量注入服务而导致的“胖构造函数”问题。此项目遵循 MIT 许可证,并兼容 .NET Standard 2.1。
项目快速启动
步骤一:添加包依赖
首先,在你的项目中,通过 NuGet 包管理器或者 .NET CLI 添加 Mediator
和 Mediator.SourceGenerator
两个包:
dotnet add package Mediator
dotnet add package Mediator.SourceGenerator
步骤二:配置依赖注入
在你的入口程序或配置依赖注入的地方,调用生成的方法以添加 Mediator 到DI容器中:
services.AddMediator();
步骤三:定义消息类型
创建一个新的请求类继承自 IRequest
或带响应的 IRequest<TResponse>
。例如:
public class GreetingRequest : IRequest<string>
{
public string Name { get; set; }
}
步骤四:实现处理程序
对应地实现处理请求的类,继承自 IRequestHandler<GreetingRequest, string>
:
public class GreetingHandler : IRequestHandler<GreetingRequest, string>
{
public async Task<string> Handle(GreetingRequest request, CancellationToken cancellationToken)
{
return $"Hello, {request.Name}!";
}
}
步骤五:使用中介者
现在可以在应用程序的任何地方通过 DI 获取 IMediator
来发送请求:
var mediator = serviceProvider.GetService<IMediator>();
string greeting = await mediator.Send(new GreetingRequest { Name = "World" });
Console.WriteLine(greeting);
应用案例和最佳实践
案例:异步命令处理
对于命令处理,你可以创建一个命令和对应的处理程序,确保命令处理过程中的事务、日志等逻辑可以封装得更加清晰。
public class CreateUserCommand : IRequest<int>
{
public string Username { get; set; }
}
public class CreateUserHandler : IRequestHandler<CreateUserCommand, int>
{
// 执行数据库操作或业务逻辑
public async Task<int> Handle(CreateUserCommand command, CancellationToken cancellationToken)
{
// 假设是保存用户的逻辑
return 1; // 返回新用户ID
}
}
最佳实践
- 模块化处理: 将消息和处理程序组织在不同的命名空间中,以便于维护。
- 利用预处理器和后处理器:通过实现
IPipelineBehavior
进行请求前的验证、日志记录或之后的结果处理。 - 性能考量: 注意大型项目中过多的消息数量可能影响性能,该库正致力于在版本 3.0 中改进这一点。
典型生态项目
虽然本项目本身是围绕中介者模式的实现,其生态系统通常涉及与其他架构模式的结合,比如 CQRS(命令查询责任分离)、清洁架构等。在实际应用中,Mediator 往往与这些高级架构概念一同被引入到项目中,以促进服务间的松耦合通信和模块化设计。
在实际项目中,可以根据具体需求,探索如何将 Mediator 集成到微服务架构、事件驱动的设计或是特定的框架(如ASP.NET Core)中,利用其提供的灵活性和高性能优势来简化复杂的应用逻辑。
以上就是基于 https://github.com/martinothamar/Mediator.git
的快速入门指南,涵盖基本的集成步骤、简单的应用实例以及一些实践中应当考虑的要点。希望这能帮助你迅速上手并高效运用这个强大的库。