用途:整理 .NET 应用中 Microsoft.Extensions.DependencyInjection 的高级注册与解析模式,覆盖服务生命周期、键控服务、装饰、工厂委托、作用域校验和托管服务注册。
主要能力:
- 生命周期:AddTransient/AddScoped/AddSingleton 的适用场景;避免把短生命周期服务注入长生命周期服务(捕获依赖),单例中改用 IServiceScopeFactory 创建作用域。
- 作用域校验:非 Web 主机可用 UseDefaultServiceProvider 设置 ValidateScopes 与 ValidateOnBuild;开发环境 Web 主机默认已开启。
- 注册模式:接口-实现配对、同一接口多实现(注入 IEnumerable<T>,顺序与注册一致)、工厂委托、库代码用 TryAdd 以便应用覆盖。
- 键控服务(net8.0+):AddKeyedScoped 注册,[FromKeyedServices("key")] 注入或 GetRequiredKeyedService 手动解析;早期 TFM 需用工厂或字典方案。
- 装饰:内置容器不原生支持,可手动包装,或用 Scrutor 的 Decorate 链式叠加。
- 托管服务:BackgroundService 与 IHostedService 的注册与用法;托管服务是单例,须用 IServiceScopeFactory 建作用域,勿直接注入 scoped 服务,ExecuteAsync 内需处理异常。
- 组织与测试:用扩展方法分组注册;测试可构建 ServiceCollection 做集成测试,单元测试优先直接构造注入与 mock。
使用方式:在 Program.cs 或 ServiceCollectionExtensions 中调用上述注册 API,按需启用作用域校验,托管服务用 AddHostedService 注册。
适用场景:.NET 应用的依赖注入配置、后台任务、缓存与仓储分层、库的默认注册。
限制:键控服务仅 net8.0+;内置容器不支持装饰,需手动或第三方库;具体版本与 API 细节以官方文档为准,资料未提供收费、平台等信息。