常用 NuGet 包清单
📦 MediatR 生态系统中的核心包和扩展
🎯 核心包
MediatR
包名: MediatR
最新版本: 12.x
用途: MediatR 核心库
dotnet add package MediatR包含内容:
IMediator接口IRequest<T>/IRequestHandler<T, R>INotification/INotificationHandler<T>IPipelineBehavior<T, R>- 默认的
Mediator实现
MediatR.Extensions.Microsoft.DependencyInjection
包名: MediatR.Extensions.Microsoft.DependencyInjection
最新版本: 11.x
用途: ASP.NET Core 依赖注入集成
dotnet add package MediatR.Extensions.Microsoft.DependencyInjection包含内容:
AddMediatR()扩展方法- 自动扫描和注册 Handler
- 自动注册管道行为
注意: MediatR 12+ 已将此功能合并到主包中,可以不再需要此包。
🔧 验证相关
FluentValidation
包名: FluentValidation.AspNetCore
最新版本: 11.x
用途: 强大的验证框架
dotnet add package FluentValidation.AspNetCore
dotnet add package FluentValidation.DependencyInjectionExtensions使用场景:
- 与 MediatR 验证行为集成
- 自动验证请求参数
- 提供详细的错误信息
示例:
builder.Services.AddValidatorsFromAssembly(typeof(Program).Assembly);
builder.Services.AddTransient(typeof(IPipelineBehavior<,>), typeof(ValidationBehavior<,>));🗺️ 对象映射
AutoMapper
包名: AutoMapper.Extensions.Microsoft.DependencyInjection
最新版本: 12.x
用途: 对象到对象的映射
dotnet add package AutoMapper.Extensions.Microsoft.DependencyInjection使用场景:
- 领域模型 → DTO 转换
- 在 Handler 中简化数据转换
示例:
builder.Services.AddAutoMapper(typeof(Program).Assembly);
public class GetOrderHandler : IRequestHandler<GetOrderQuery, OrderDto>
{
private readonly IMapper _mapper;
public async Task<OrderDto> Handle(GetOrderQuery request, CancellationToken ct)
{
var order = await _repo.GetByIdAsync(request.OrderId);
return _mapper.Map<OrderDto>(order);
}
}💾 缓存相关
Microsoft.Extensions.Caching.Memory
包名: Microsoft.Extensions.Caching.Memory
最新版本: 8.x
用途: 内存缓存
dotnet add package Microsoft.Extensions.Caching.Memory使用场景:
- 实现缓存行为
- 临时数据存储
Microsoft.Extensions.Caching.StackExchangeRedis
包名: Microsoft.Extensions.Caching.StackExchangeRedis
最新版本: 8.x
用途: Redis 分布式缓存
dotnet add package Microsoft.Extensions.Caching.StackExchangeRedis使用场景:
- 分布式缓存行为
- 多实例共享缓存
配置:
builder.Services.AddStackExchangeRedisCache(options =>
{
options.Configuration = "localhost:6379";
});📊 日志和监控
Serilog
包名: Serilog.AspNetCore
最新版本: 8.x
用途: 结构化日志
dotnet add package Serilog.AspNetCore
dotnet add package Serilog.Sinks.Console
dotnet add package Serilog.Sinks.File使用场景:
- 增强日志行为
- 结构化日志输出
- 日志聚合和分析
配置:
Log.Logger = new LoggerConfiguration()
.WriteTo.Console()
.WriteTo.File("logs/log.txt")
.CreateLogger();
builder.Host.UseSerilog();🧪 测试相关
xUnit
包名: xunit
最新版本: 2.x
用途: 单元测试框架
dotnet add package xunit
dotnet add package xunit.runner.visualstudio
dotnet add package Microsoft.NET.Test.SdkMoq
包名: Moq
最新版本: 4.x
用途: Mock 框架
dotnet add package Moq使用场景:
- Mock Repository
- Mock 外部服务
- 测试 Handler
示例:
var mockRepo = new Mock<IOrderRepository>();
mockRepo.Setup(r => r.GetByIdAsync(It.IsAny<Guid>(), It.IsAny<CancellationToken>()))
.ReturnsAsync(new Order());FluentAssertions
包名: FluentAssertions
最新版本: 6.x
用途: 优雅的断言库
dotnet add package FluentAssertions使用场景:
- 提高测试可读性
- 丰富的断言方法
示例:
result.Should().NotBeNull();
result.OrderId.Should().NotBeEmpty();
list.Should().HaveCount(5);🔍 诊断和性能
BenchmarkDotNet
包名: BenchmarkDotNet
最新版本: 0.13.x
用途: 性能基准测试
dotnet add package BenchmarkDotNet使用场景:
- 性能对比测试
- 优化前后对比
- 内存分配分析
MiniProfiler
包名: MiniProfiler.AspNetCore.Mvc
最新版本: 4.x
用途: 性能分析工具
dotnet add package MiniProfiler.AspNetCore.Mvc使用场景:
- Web 应用性能监控
- SQL 查询分析
- 请求时间线可视化
🎨 装饰器和扫描
Scrutor
包名: Scrutor
最新版本: 4.x
用途: 程序集扫描和装饰器
dotnet add package Scrutor使用场景:
- 高级程序集扫描
- 装饰器模式实现
- 动态服务注册
示例:
// 装饰器模式
builder.Services.Decorate(typeof(IPipelineBehavior<,>), typeof(LoggingBehavior<,>));🌐 HTTP 客户端
Refit
包名: Refit
最新版本: 7.x
用途: REST API 客户端
dotnet add package Refit.HttpClientFactory使用场景:
- Handler 中调用外部 API
- 类型安全的 HTTP 客户端
📝 文档相关
Swashbuckle.AspNetCore
包名: Swashbuckle.AspNetCore
最新版本: 6.x
用途: Swagger/OpenAPI 文档生成
dotnet add package Swashbuckle.AspNetCore使用场景:
- API 文档自动生成
- 在线测试界面
- OpenAPI 规范导出
🔐 安全相关
Microsoft.AspNetCore.Authentication.JwtBearer
包名: Microsoft.AspNetCore.Authentication.JwtBearer
最新版本: 8.x
用途: JWT 认证
dotnet add package Microsoft.AspNetCore.Authentication.JwtBearer使用场景:
- API 认证
- 在 Handler 中获取用户信息
📦 完整项目示例
Web API 项目推荐包
# 核心
dotnet add package MediatR
# 验证
dotnet add package FluentValidation.AspNetCore
dotnet add package FluentValidation.DependencyInjectionExtensions
# 对象映射
dotnet add package AutoMapper.Extensions.Microsoft.DependencyInjection
# 日志
dotnet add package Serilog.AspNetCore
dotnet add package Serilog.Sinks.Console
dotnet add package Serilog.Sinks.File
# 缓存
dotnet add package Microsoft.Extensions.Caching.StackExchangeRedis
# 文档
dotnet add package Swashbuckle.AspNetCore
# 认证
dotnet add package Microsoft.AspNetCore.Authentication.JwtBearer测试项目推荐包
# 测试框架
dotnet add package xunit
dotnet add package xunit.runner.visualstudio
dotnet add package Microsoft.NET.Test.Sdk
# Mock
dotnet add package Moq
# 断言
dotnet add package FluentAssertions
# 集成测试
dotnet add package Microsoft.AspNetCore.Mvc.Testing📊 包版本兼容性
| MediatR 版本 | .NET 版本 | DI 扩展版本 |
|---|---|---|
| 12.x | .NET 6+ | 内置(无需单独包) |
| 11.x | .NET 6+ | 11.x |
| 10.x | .NET Standard 2.1 | 10.x |
| 9.x | .NET Standard 2.0 | 9.x |
建议: 使用最新稳定版(12.x),获得最佳性能和功能。
🔗 相关链接
- MediatR GitHub: https://github.com/jbogard/MediatR
- NuGet 搜索: https://www.nuget.org/packages?q=mediatr
- FluentValidation: https://docs.fluentvalidation.net/
- AutoMapper: https://automapper.org/
- Serilog: https://serilog.net/
🎓 总结
必备包
✅ 核心: MediatR
✅ 验证: FluentValidation
✅ 测试: xUnit + Moq + FluentAssertions
✅ 日志: Serilog
推荐包
✅ 映射: AutoMapper
✅ 缓存: Redis Cache
✅ 文档: Swashbuckle
✅ 装饰器: Scrutor
可选包
⚠️ 性能: BenchmarkDotNet
⚠️ 监控: MiniProfiler
⚠️ HTTP: Refit
💡 提示: 根据项目实际需求选择包,避免过度依赖!