契约层该程序集是 .NET 依赖注入体系的抽象契约层,不包含完整容器实现,而是定义框架、类库与应用程序共同遵循的服务注册、解析、作用域和生命周期模型。它让上层组件只依赖接口,不绑定具体 IoC 容器。
IServiceCollection 表示服务描述符集合,负责收集注册信息;IServiceProvider 提供 GetService(Type) 与泛型扩展解析入口;IServiceScope 和 IServiceScopeFactory 用于创建与释放作用域。它们共同构成构造函数注入、工厂注入和实例注入的基础。
ServiceLifetime:Singleton、Scoped、Transient,决定实例复用范围与释放责任。ServiceDescriptor:记录服务类型、实现类型、实例、工厂委托及生命周期。ServiceCollection 扩展:支持批量注册、替换、移除和条件注册。AddSingleton、AddScoped、AddTransient 是最常见的注册入口;TryAdd、TryAddEnumerable、Replace、RemoveAll 用于避免重复注册和调整服务集合。这些方法以扩展方法形式存在,便于类库在不引入具体容器的情况下声明依赖。
ActivatorUtilities 可创建未显式注册的类型实例,并自动注入已注册依赖;作用域机制为 Web 请求、后台任务和消息处理提供隔离的实例边界。缺少该程序集时,相关 API 的元数据与 IL 引用无法解析。
许多 Microsoft 扩展库只引用 Abstractions,而由 Microsoft.Extensions.DependencyInjection 提供默认容器实现。这样 ASP.NET Core、通用主机、日志、配置、选项、HttpClientFactory、EF Core 等组件可以共享同一套 DI 抽象。
应用启动或首次调用 DI API 时,可能抛出 FileNotFoundException、FileLoadException、TypeLoadException、MissingMethodException 或 TypeInitializationException。异常信息通常包含无法加载程序集或无法解析类型。
服务注册、服务解析、作用域创建、构造函数注入、工厂委托和生命周期管理都会失败。使用 BuildServiceProvider、CreateScope、GetRequiredService 的代码可能在启动阶段直接崩溃。
ASP.NET Core 主机、后台服务、选项模式、日志提供程序、配置绑定、HttpClientFactory、EF Core 等大量组件依赖该抽象。缺少后,它们可能无法注册依赖,表现为启动失败、功能缺失或运行时解析异常。
常见原因包括 NuGet 引用未复制到输出目录、发布裁剪误删、单文件发布解包异常、ClickOnce 清单缺失、GAC 版本冲突、绑定重定向错误、目标框架不兼容或依赖树中版本不一致。
检查项目引用与传递依赖,确认输出目录、deps.json、runtimeconfig.json 和发布配置;使用 dotnet list package --include-transitive 查看依赖树;保持相关 Microsoft.Extensions 包版本一致;必要时配置绑定重定向并避免手动删除看似冗余的程序集。