# 依赖注入系统
**本文档引用的文件**
- [IocContainer.cs](file://GFramework.Core/ioc/IocContainer.cs)
- [IIocContainer.cs](file://GFramework.Core.Abstractions/ioc/IIocContainer.cs)
- [README.md(IoC包)](file://GFramework.Core/ioc/README.md)
- [IInitializable.cs](file://GFramework.Core.Abstractions/lifecycle/IInitializable.cs)
- [IDisposable.cs](file://GFramework.Core.Abstractions/lifecycle/IDisposable.cs)
- [ILifecycle.cs](file://GFramework.Core.Abstractions/lifecycle/ILifecycle.cs)
- [Architecture.cs](file://GFramework.Core/architecture/Architecture.cs)
- [IocContainerTests.cs](file://GFramework.Core.Tests/ioc/IocContainerTests.cs)
## 目录
1. [简介](#简介)
2. [项目结构](#项目结构)
3. [核心组件](#核心组件)
4. [架构总览](#架构总览)
5. [详细组件分析](#详细组件分析)
6. [依赖分析](#依赖分析)
7. [性能考虑](#性能考虑)
8. [故障排除指南](#故障排除指南)
9. [结论](#结论)
10. [附录](#附录)
## 简介
本文件面向GFramework的依赖注入系统,聚焦于IocContainer的实现与设计模式,系统阐述容器的注册与解析流程、生命周期管理机制(IInitializable、IDisposable)、类型安全与编译时检查、容器冻结与线程安全、最佳实践与故障排除,并给出可测试与可维护的架构建议。
## 项目结构
IoC相关代码位于以下位置:
- 核心实现:GFramework.Core/ioc/IocContainer.cs
- 接口定义:GFramework.Core.Abstractions/ioc/IIocContainer.cs
- 生命周期接口:GFramework.Core.Abstractions/lifecycle/IInitializable.cs、IDisposable.cs、ILifecycle.cs
- 使用说明与示例:GFramework.Core/ioc/README.md
- 架构集成:GFramework.Core/architecture/Architecture.cs
- 单元测试:GFramework.Core.Tests/ioc/IocContainerTests.cs
```mermaid
graph TB
subgraph "抽象层"
II["IIocContainer 接口"]
LInit["IInitializable 接口"]
LDispose["IDisposable 接口"]
LLife["ILifecycle 接口"]
end
subgraph "实现层"
IC["IocContainer 实现"]
end
subgraph "应用层"
Arch["Architecture 架构"]
Tests["IocContainerTests 测试"]
end
II --> IC
LInit --> LLife
LDispose --> LLife
Arch --> IC
Tests --> IC
```
图表来源
- [IIocContainer.cs](file://GFramework.Core.Abstractions/ioc/IIocContainer.cs#L1-L116)
- [IocContainer.cs](file://GFramework.Core/ioc/IocContainer.cs#L1-L373)
- [IInitializable.cs](file://GFramework.Core.Abstractions/lifecycle/IInitializable.cs#L1-L12)
- [IDisposable.cs](file://GFramework.Core.Abstractions/lifecycle/IDisposable.cs#L1-L12)
- [ILifecycle.cs](file://GFramework.Core.Abstractions/lifecycle/ILifecycle.cs#L1-L6)
- [Architecture.cs](file://GFramework.Core/architecture/Architecture.cs#L1-L200)
- [IocContainerTests.cs](file://GFramework.Core.Tests/ioc/IocContainerTests.cs#L1-L200)
章节来源
- [IocContainer.cs](file://GFramework.Core/ioc/IocContainer.cs#L1-L373)
- [IIocContainer.cs](file://GFramework.Core.Abstractions/ioc/IIocContainer.cs#L1-L116)
- [README.md(IoC包)](file://GFramework.Core/ioc/README.md#L1-L681)
## 核心组件
- IIocContainer:定义注册、解析、查询与容器管理的契约,涵盖单例、多实现、系统实例注册,以及Get/GetAll/GetRequired等解析方法。
- IocContainer:IIocContainer的具体实现,提供基于字典+集合的索引结构、读写锁的线程安全、容器冻结保护、日志记录与错误处理。
- 生命周期接口:IInitializable、IDisposable、ILifecycle,为组件提供初始化与销毁的标准能力,便于与容器生命周期协同。
章节来源
- [IIocContainer.cs](file://GFramework.Core.Abstractions/ioc/IIocContainer.cs#L1-L116)
- [IocContainer.cs](file://GFramework.Core/ioc/IocContainer.cs#L1-L373)
- [IInitializable.cs](file://GFramework.Core.Abstractions/lifecycle/IInitializable.cs#L1-L12)
- [IDisposable.cs](file://GFramework.Core.Abstractions/lifecycle/IDisposable.cs#L1-L12)
- [ILifecycle.cs](file://GFramework.Core.Abstractions/lifecycle/ILifecycle.cs#L1-L6)
## 架构总览
IocContainer作为架构(Architecture)的核心组件之一,贯穿System/Model/Utility的注册与获取。容器采用“手动注册、类型安全、线程安全、容器冻结”的设计,避免自动解析带来的复杂度,强调可控的生命周期与清晰的依赖关系。
```mermaid
sequenceDiagram
participant App as "应用代码"
participant Arch as "Architecture"
participant C as "IocContainer"
participant S as "ISystem 实例"
App->>Arch : "RegisterSystem(S)"
Arch->>C : "Register(S)"
C->>C : "写锁 + 注册内部索引"
App->>Arch : "GetSystem()"
Arch->>C : "Get()"
C->>C : "读锁 + 查找类型索引"
C-->>Arch : "返回实例或null"
Arch-->>App : "返回实例"
```
图表来源
- [Architecture.cs](file://GFramework.Core/architecture/Architecture.cs#L150-L175)
- [IocContainer.cs](file://GFramework.Core/ioc/IocContainer.cs#L166-L199)
- [IocContainer.cs](file://GFramework.Core/ioc/IocContainer.cs#L211-L230)
## 详细组件分析
### IocContainer 实现与设计模式
- 设计模式:控制反转(IoC)与简单工厂结合,通过接口隔离与具体实现解耦。
- 数据结构:
- _objects:HashSet