Skip to content

常用 NuGet 包清单 ​

📦 MediatR 生态系统中的核心包和扩展


🎯 核心包 ​

MediatR ​

包名: MediatR
最新版本: 12.x
用途: MediatR 核心库

bash
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 依赖注入集成

bash
dotnet add package MediatR.Extensions.Microsoft.DependencyInjection

包含内容:

  • AddMediatR() 扩展方法
  • 自动扫描和注册 Handler
  • 自动注册管道行为

注意: MediatR 12+ 已将此功能合并到主包中,可以不再需要此包。


🔧 验证相关 ​

FluentValidation ​

包名: FluentValidation.AspNetCore
最新版本: 11.x
用途: 强大的验证框架

bash
dotnet add package FluentValidation.AspNetCore
dotnet add package FluentValidation.DependencyInjectionExtensions

使用场景:

  • 与 MediatR 验证行为集成
  • 自动验证请求参数
  • 提供详细的错误信息

示例:

csharp
builder.Services.AddValidatorsFromAssembly(typeof(Program).Assembly);
builder.Services.AddTransient(typeof(IPipelineBehavior<,>), typeof(ValidationBehavior<,>));

🗺️ 对象映射 ​

AutoMapper ​

包名: AutoMapper.Extensions.Microsoft.DependencyInjection
最新版本: 12.x
用途: 对象到对象的映射

bash
dotnet add package AutoMapper.Extensions.Microsoft.DependencyInjection

使用场景:

  • 领域模型 → DTO 转换
  • 在 Handler 中简化数据转换

示例:

csharp
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
用途: 内存缓存

bash
dotnet add package Microsoft.Extensions.Caching.Memory

使用场景:

  • 实现缓存行为
  • 临时数据存储

Microsoft.Extensions.Caching.StackExchangeRedis ​

包名: Microsoft.Extensions.Caching.StackExchangeRedis
最新版本: 8.x
用途: Redis 分布式缓存

bash
dotnet add package Microsoft.Extensions.Caching.StackExchangeRedis

使用场景:

  • 分布式缓存行为
  • 多实例共享缓存

配置:

csharp
builder.Services.AddStackExchangeRedisCache(options =>
{
    options.Configuration = "localhost:6379";
});

📊 日志和监控 ​

Serilog ​

包名: Serilog.AspNetCore
最新版本: 8.x
用途: 结构化日志

bash
dotnet add package Serilog.AspNetCore
dotnet add package Serilog.Sinks.Console
dotnet add package Serilog.Sinks.File

使用场景:

  • 增强日志行为
  • 结构化日志输出
  • 日志聚合和分析

配置:

csharp
Log.Logger = new LoggerConfiguration()
    .WriteTo.Console()
    .WriteTo.File("logs/log.txt")
    .CreateLogger();

builder.Host.UseSerilog();

🧪 测试相关 ​

xUnit ​

包名: xunit
最新版本: 2.x
用途: 单元测试框架

bash
dotnet add package xunit
dotnet add package xunit.runner.visualstudio
dotnet add package Microsoft.NET.Test.Sdk

Moq ​

包名: Moq
最新版本: 4.x
用途: Mock 框架

bash
dotnet add package Moq

使用场景:

  • Mock Repository
  • Mock 外部服务
  • 测试 Handler

示例:

csharp
var mockRepo = new Mock<IOrderRepository>();
mockRepo.Setup(r => r.GetByIdAsync(It.IsAny<Guid>(), It.IsAny<CancellationToken>()))
    .ReturnsAsync(new Order());

FluentAssertions ​

包名: FluentAssertions
最新版本: 6.x
用途: 优雅的断言库

bash
dotnet add package FluentAssertions

使用场景:

  • 提高测试可读性
  • 丰富的断言方法

示例:

csharp
result.Should().NotBeNull();
result.OrderId.Should().NotBeEmpty();
list.Should().HaveCount(5);

🔍 诊断和性能 ​

BenchmarkDotNet ​

包名: BenchmarkDotNet
最新版本: 0.13.x
用途: 性能基准测试

bash
dotnet add package BenchmarkDotNet

使用场景:

  • 性能对比测试
  • 优化前后对比
  • 内存分配分析

MiniProfiler ​

包名: MiniProfiler.AspNetCore.Mvc
最新版本: 4.x
用途: 性能分析工具

bash
dotnet add package MiniProfiler.AspNetCore.Mvc

使用场景:

  • Web 应用性能监控
  • SQL 查询分析
  • 请求时间线可视化

🎨 装饰器和扫描 ​

Scrutor ​

包名: Scrutor
最新版本: 4.x
用途: 程序集扫描和装饰器

bash
dotnet add package Scrutor

使用场景:

  • 高级程序集扫描
  • 装饰器模式实现
  • 动态服务注册

示例:

csharp
// 装饰器模式
builder.Services.Decorate(typeof(IPipelineBehavior<,>), typeof(LoggingBehavior<,>));

🌐 HTTP 客户端 ​

Refit ​

包名: Refit
最新版本: 7.x
用途: REST API 客户端

bash
dotnet add package Refit.HttpClientFactory

使用场景:

  • Handler 中调用外部 API
  • 类型安全的 HTTP 客户端

📝 文档相关 ​

Swashbuckle.AspNetCore ​

包名: Swashbuckle.AspNetCore
最新版本: 6.x
用途: Swagger/OpenAPI 文档生成

bash
dotnet add package Swashbuckle.AspNetCore

使用场景:

  • API 文档自动生成
  • 在线测试界面
  • OpenAPI 规范导出

🔐 安全相关 ​

Microsoft.AspNetCore.Authentication.JwtBearer ​

包名: Microsoft.AspNetCore.Authentication.JwtBearer
最新版本: 8.x
用途: JWT 认证

bash
dotnet add package Microsoft.AspNetCore.Authentication.JwtBearer

使用场景:

  • API 认证
  • 在 Handler 中获取用户信息

📦 完整项目示例 ​

Web API 项目推荐包 ​

bash
# 核心
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

测试项目推荐包 ​

bash
# 测试框架
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.110.x
9.x.NET Standard 2.09.x

建议: 使用最新稳定版(12.x),获得最佳性能和功能。


🔗 相关链接 ​


🎓 总结 ​

必备包 ​

✅ 核心: MediatR
✅ 验证: FluentValidation
✅ 测试: xUnit + Moq + FluentAssertions
✅ 日志: Serilog

推荐包 ​

✅ 映射: AutoMapper
✅ 缓存: Redis Cache
✅ 文档: Swashbuckle
✅ 装饰器: Scrutor

可选包 ​

⚠️ 性能: BenchmarkDotNet
⚠️ 监控: MiniProfiler
⚠️ HTTP: Refit


💡 提示: 根据项目实际需求选择包,避免过度依赖!

Released under the CC BY-SA 4.0 License.