10分钟快速上手Mediator:.NET源代码生成器实战指南
你是否正在寻找一个高性能的.NET中介者模式实现?Mediator项目正是你的理想选择!这是一个基于源代码生成器的高性能.NET中介者模式实现,提供了与MediatR类似的API,但性能更优且支持完整的Native AOT。
🚀 为什么选择Mediator?
Mediator是一个专门为.NET开发者设计的高性能中介者模式库,它通过源代码生成器技术实现了零反射、零运行时代码生成的解决方案。这意味着:
- 卓越性能:相比传统实现,性能提升显著
- 完整的AOT支持:完美支持Native AOT编译
- 编译时错误检测:在开发阶段就能发现问题
- 稳定API:遵循严格的语义版本控制
📦 快速安装
在你的项目中添加Mediator非常简单:
<PackageReference Include="Mediator.SourceGenerator" Version="3.0.*">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers</IncludeAssets>
</PackageReference>
<PackageReference Include="Mediator.Abstractions" Version="3.0.*" />
🎯 核心概念速览
Mediator支持多种消息类型:
IRequest<TResponse>- 带响应的请求ICommand- 命令(无返回值)IQuery<TResponse>- 查询INotification- 通知
每种消息类型都有对应的处理器接口,如IRequestHandler<TRequest, TResponse>。
⚡ 10分钟上手示例
让我们通过一个简单的Ping-Pong示例来快速了解Mediator的使用:
1. 配置依赖注入
var services = new ServiceCollection();
services.AddMediator(options =>
{
options.Namespace = "SimpleConsole";
options.Assemblies = [typeof(Ping)];
});
2. 定义消息和处理器
public sealed record Ping(Guid Id) : IRequest<Pong>;
public sealed record Pong(Guid Id);
public sealed class PingHandler : IRequestHandler<Ping, Pong>
{
public ValueTask<Pong> Handle(Ping request, CancellationToken cancellationToken)
{
return new ValueTask<Pong>(new Pong(request.Id));
}
}
3. 使用Mediator发送消息
var mediator = serviceProvider.GetRequiredService<IMediator>();
var response = await mediator.Send(new Ping(Guid.NewGuid()));
🔧 高级功能:管道行为
Mediator支持强大的管道行为,让你可以在消息处理前后添加自定义逻辑:
public sealed class GenericLoggerHandler<TMessage, TResponse> : IPipelineBehavior<TMessage, TResponse>
where TMessage : IMessage
{
public async ValueTask<TResponse> Handle(
TMessage message,
MessageHandlerDelegate<TMessage, TResponse> next,
CancellationToken cancellationToken
)
{
Console.WriteLine("处理消息前");
var response = await next(message, cancellationToken);
Console.WriteLine("处理消息后");
return response;
}
}
🎨 通知系统
Mediator的通知系统让你能够实现发布-订阅模式:
public sealed record ErrorMessage(Exception Exception) : INotification;
public sealed class ErrorNotificationHandler : INotificationHandler<ErrorMessage>
{
public ValueTask Handle(ErrorMessage error, CancellationToken cancellationToken)
{
// 处理错误通知
return default;
}
}
📊 性能优化建议
- 使用Singleton生命周期:获得最佳性能
- 合理使用管道行为:避免不必要的性能开销
- 利用编译时检查:减少运行时错误
🌟 实际应用场景
Mediator非常适合以下场景:
- 跨领域关注点(日志记录、指标等)
- 避免构造函数注入过多服务
- 需要高性能消息处理的应用程序
- Native AOT应用开发
🚀 下一步行动
现在你已经了解了Mediator的基础知识,可以:
- 查看samples/目录中的完整示例
- 探索ASP.NET Core集成示例
- 阅读官方文档深入了解高级功能
Mediator的强大功能和卓越性能让它成为.NET中介者模式的终极选择。开始使用它,让你的应用程序更加模块化、可维护且高性能! 🎉
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考




