IOC流程
准备要注册的对象 和接口,以及注册的生命周期 准备注册,先检查 是否释放 检测是否 已注册,没有则添加到 集合内并反回对象 创建服务提供工程。初始化容器,根据注入的对象类型选择不同的注册方式 1 通过据提的接口和实现类 2 直接new 对象的 3 通过实例工厂创建 使用 1 的会直接注册委托Create,放到 ServiceRegistry 里,在注册到_registries , 在获取服务时直接根据接口和实现类来创建对象 使用 2 service.ImplementationInstance 注册委托 cat.Register(service.ServiceType,和上面一样 使用 3 service.ImplementationType 注册委托 cat.Register(service.ServiceType,和上面一样 生成容器 ,就是赋值容器,并注册一个服务范围工程的委托,生命周期为Transient CreateServiceProvider() 就i是返回当前容器 创建服务范围,创建子容器,并返回当前子容器,最后赋值到servicesscope,(CreateScope()直接跑到getservices方法,没有重写直接调用源码执行;//此处源码也出先执行getservices在CreateScope) GetService 根据接口获取对象,判断是否为v容器类还是 服务提供就接口,是的话直接返回当前对象 判断是否是泛型和 获取泛型 的基本类型给判断serviceType.IsGenericType && serviceType.GetGenericTypeDefinition() == typeof(IEnumerable<>)) 判断服务是否已注册, new 一个key ,在 root ,self 中用的到 根据生命周期 来对象 ,root ,self 先判断是否 已生对象,没有则 去生产对象 Transient 直接去生成新对象, 并根据是否 实现IDisposable 来 来是否添加到 Disposable是否集合里 这里会执行ServiceRegistry 里委托factory ,是根据前面注册时根据不同的注册方法,会有不同的委托来执行对象的创建 生产对象: 判断是否有泛型参数是否有值 获取构造函数 获取自定义属性 没有自定义属性则赋值构造函数 获取构造函数参数 参数为长度0 则创建对对象并返回 如果 有参数则遍历参数 在传入当前参数并调用GetService 去创建对象,并通过委托执行 返回
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 写一个简单的SQL生成工具
· AI 智能体引爆开源社区「GitHub 热点速览」
· C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)