NET Core中负责依赖注入和控制反转的核心组件有两个:IServiceCollection和IServiceProvider

在 .NET Core 中,依赖注入(DI)和控制反转(IoC)的核心组件为 ‌**IServiceCollection** ‌ 和 ‌**IServiceProvider**‌,二者分工明确,共同实现服务的注册与解析‌。


一、IServiceCollection:服务注册

  1. 核心职责

    • 负责‌服务注册‌,定义接口与实现类的映射关系及生命周期‌。

    • 提供扩展方法 AddTransientAddScopedAddSingleton 等,指定服务的生命周期‌。

      复制代码

      services.AddTransient<ILogger, FileLogger>(); // 瞬时生命周期

      services.AddScoped<IDatabase, SqlDatabase>(); // 作用域生命周期

      services.AddSingleton<ICache, MemoryCache>(); // 单例生命周期

  2. 生命周期类型

    • Transient‌:每次请求创建新实例。
    • Scoped‌:同一作用域(如 HTTP 请求)共享一个实例‌。
    • Singleton‌:全局共享单个实例。

二、IServiceProvider:服务解析

  1. 核心职责

    • 通过 IServiceCollection.BuildServiceProvider() 构建,用于‌解析已注册的服务‌‌。

    • 提供 GetService<T>GetRequiredService<T> 方法获取服务实例。

      复制代码

      var provider = services.BuildServiceProvider(); var logger = provider.GetService<ILogger>();

  2. 依赖注入实现

    • 支持‌构造函数注入‌、属性注入(不推荐)等方式自动解析依赖‌。

    • 示例 ‌(控制器注入):

      复制代码

      public class UserController : Controller

      {

      private readonly IUserService _userService;

      public UserController(IUserService userService) => _userService = userService; // 自动注入

      }


三、协作流程

  1. 注册阶段
    • Startup.ConfigureServices 中通过 IServiceCollection 注册服务‌。
  2. 构建容器
    • 调用 BuildServiceProvider() 生成 IServiceProvider‌。
  3. 解析阶段
    • 通过构造函数或手动从 IServiceProvider 获取服务实例‌。

四、应用场景

  1. 解耦业务逻辑
    • 通过接口抽象与实现分离,便于替换具体实现(如切换数据库、日志系统)‌。
  2. 中间件与配置集成
    • 中间件通过构造函数注入服务,配置类通过 IOptions<T> 注入‌。
  3. 资源生命周期管理
    • 合理使用生命周期避免内存泄漏(如 Scoped 生命周期释放数据库连接)‌。

总结

  • ‌**IServiceCollection** ‌ 是依赖关系的配置入口,‌**IServiceProvider**‌ 是依赖解析的执行容器‌。
  • 二者结合实现了控制反转(IoC)的核心思想:将依赖的创建与使用分离,提升代码的可维护性和可测试性‌。
相关推荐
sg_knight21 分钟前
Spring 框架中的 SseEmitter 使用详解
java·spring boot·后端·spring·spring cloud·sse·sseemitter
喵个咪4 小时前
初学者入门:用 go-kratos-admin + protoc-gen-typescript-http 快速搭建企业级 Admin 系统
后端·typescript·go
刘一说4 小时前
Nacos 权限控制详解:从开源版 v2.2+ 到企业级安全实践
spring boot·安全·spring cloud·微服务·nacos·架构·开源
weixin_537217065 小时前
UI教程资源合集
经验分享
用户21411832636025 小时前
手把手教你用Claude制作专属PPT生成器-从模板学习到自动生成全流程实战
后端
TG:@yunlaoda360 云老大6 小时前
谷歌云AI 时代的算力革命:CPU、GPU 到 TPU 的架构与定位解析
人工智能·架构·googlecloud
烛阴6 小时前
C#异常概念与try-catch入门
前端·c#
钮钴禄·爱因斯晨6 小时前
# 企业级前端智能化架构:DevUI与MateChat融合实践深度剖析
前端·架构
计算机毕设匠心工作室7 小时前
【python大数据毕设实战】全面皮肤病症状数据可视化分析系统、Hadoop、计算机毕业设计、包括数据爬取、数据分析、数据可视化、机器学习、实战教学
后端·python·mysql
摆烂工程师7 小时前
2025年12月最新的 Google AI One Pro 1年会员教育认证通关指南
前端·后端·ai编程