# 依赖管理
**本文引用的文件**
- [IocContainer.cs](file://GFramework.Core/ioc/IocContainer.cs)
- [IIocContainer.cs](file://GFramework.Core.Abstractions/ioc/IIocContainer.cs)
- [Architecture.cs](file://GFramework.Core/architecture/Architecture.cs)
- [ArchitectureServices.cs](file://GFramework.Core/architecture/ArchitectureServices.cs)
- [AbstractSystem.cs](file://GFramework.Core/system/AbstractSystem.cs)
- [ContextAwareBase.cs](file://GFramework.Core/rule/ContextAwareBase.cs)
- [IContextAware.cs](file://GFramework.Core.Abstractions/rule/IContextAware.cs)
- [ISystem.cs](file://GFramework.Core.Abstractions/system/ISystem.cs)
- [AbstractModel.cs](file://GFramework.Core/model/AbstractModel.cs)
- [ConsoleLoggerFactoryProvider.cs](file://GFramework.Core/logging/ConsoleLoggerFactoryProvider.cs)
- [IocContainerTests.cs](file://GFramework.Core.Tests/ioc/IocContainerTests.cs)
- [TestSystem.cs](file://GFramework.Core.Tests/system/TestSystem.cs)
- [architecture-patterns.md](file://docs/best-practices/architecture-patterns.md)
- [rule README.md](file://GFramework.Core/rule/README.md)
- [system README.md](file://GFramework.Core/system/README.md)
## 目录
1. [简介](#简介)
2. [项目结构](#项目结构)
3. [核心组件](#核心组件)
4. [架构总览](#架构总览)
5. [详细组件分析](#详细组件分析)
6. [依赖分析](#依赖分析)
7. [性能考量](#性能考量)
8. [故障排查指南](#故障排查指南)
9. [结论](#结论)
10. [附录](#附录)
## 简介
本文件面向GFramework的依赖管理最佳实践,围绕“构造函数注入”“接口隔离”“依赖倒置”三大原则,结合框架中的IoC容器、架构服务、系统与模型基类、上下文感知机制,给出可落地的实现范式与测试策略。文档同时覆盖常见陷阱与规避方案,帮助团队在复杂游戏架构中建立稳定、可测试、可演进的依赖体系。
## 项目结构
GFramework采用分层与职责分离的组织方式,核心依赖管理相关模块分布如下:
- 核心容器与接口:GFramework.Core/ioc 与 GFramework.Core.Abstractions/ioc
- 架构与服务:GFramework.Core/architecture
- 系统与模型基类:GFramework.Core/system、GFramework.Core/model
- 上下文感知与规则:GFramework.Core/rule
- 日志与测试:GFramework.Core/logging、GFramework.Core.Tests
```mermaid
graph TB
subgraph "核心容器与接口"
IIoc["IIocContainer 接口"]
Ioc["IocContainer 实现"]
end
subgraph "架构与服务"
Arch["Architecture 架构基类"]
Svc["ArchitectureServices 架构服务"]
end
subgraph "系统与模型"
Sys["AbstractSystem 系统基类"]
Mod["AbstractModel 模型基类"]
end
subgraph "上下文感知"
Ctx["ContextAwareBase 基类"]
ICtx["IContextAware 接口"]
end
subgraph "日志与测试"
LogProv["ConsoleLoggerFactoryProvider"]
Tests["IocContainerTests 等测试"]
end
IIoc --> Ioc
Svc --> Ioc
Arch --> Svc
Sys --> ICtx
Mod --> ICtx
Ctx --> ICtx
Ioc --> LogProv
Tests --> Ioc
```
图表来源
- [IIocContainer.cs](file://GFramework.Core.Abstractions/ioc/IIocContainer.cs#L1-L116)
- [IocContainer.cs](file://GFramework.Core/ioc/IocContainer.cs#L1-L373)
- [ArchitectureServices.cs](file://GFramework.Core/architecture/ArchitectureServices.cs#L1-L106)
- [Architecture.cs](file://GFramework.Core/architecture/Architecture.cs#L1-L569)
- [AbstractSystem.cs](file://GFramework.Core/system/AbstractSystem.cs#L1-L62)
- [AbstractModel.cs](file://GFramework.Core/model/AbstractModel.cs#L1-L34)
- [ContextAwareBase.cs](file://GFramework.Core/rule/ContextAwareBase.cs#L1-L43)
- [IContextAware.cs](file://GFramework.Core.Abstractions/rule/IContextAware.cs#L1-L21)
- [ConsoleLoggerFactoryProvider.cs](file://GFramework.Core/logging/ConsoleLoggerFactoryProvider.cs#L1-L24)
- [IocContainerTests.cs](file://GFramework.Core.Tests/ioc/IocContainerTests.cs#L1-L346)
章节来源
- [IIocContainer.cs](file://GFramework.Core.Abstractions/ioc/IIocContainer.cs#L1-L116)
- [IocContainer.cs](file://GFramework.Core/ioc/IocContainer.cs#L1-L373)
- [ArchitectureServices.cs](file://GFramework.Core/architecture/ArchitectureServices.cs#L1-L106)
- [Architecture.cs](file://GFramework.Core/architecture/Architecture.cs#L1-L569)
- [AbstractSystem.cs](file://GFramework.Core/system/AbstractSystem.cs#L1-L62)
- [AbstractModel.cs](file://GFramework.Core/model/AbstractModel.cs#L1-L34)
- [ContextAwareBase.cs](file://GFramework.Core/rule/ContextAwareBase.cs#L1-L43)
- [IContextAware.cs](file://GFramework.Core.Abstractions/rule/IContextAware.cs#L1-L21)
- [ConsoleLoggerFactoryProvider.cs](file://GFramework.Core/logging/ConsoleLoggerFactoryProvider.cs#L1-L24)
- [IocContainerTests.cs](file://GFramework.Core.Tests/ioc/IocContainerTests.cs#L1-L346)
## 核心组件
- 依赖注入容器(IIocContainer/IocContainer)
- 提供注册(单例、多样性、系统)、解析(Get/GetRequired/GetAll/GetAllSorted)、冻结保护、包含性检查与清空等能力。
- 支持线程安全的读写锁与冻结状态,防止初始化后误注册。
- 架构服务(ArchitectureServices)
- 聚合容器、事件总线、命令/查询总线,统一对外暴露。
- 在SetContext时同步传递上下文给容器与各总线。
- 架构基类(Architecture)
- 通过Services.Container访问IocContainer,统一注册系统/模型/工具,维护生命周期队列与阶段流转。
- 初始化完成后冻结容器,保证运行期依赖解析的确定性。
- 系统与模型基类(AbstractSystem/AbstractModel)
- 均继承ContextAwareBase,具备上下文感知能力,便于在OnInit/Init中按需获取依赖。
- 上下文感知(ContextAwareBase/IContextAware)
- 为组件提供SetContext/GetContext能力,支持延迟绑定与默认回退。
章节来源
- [IIocContainer.cs](file://GFramework.Core.Abstractions/ioc/IIocContainer.cs#L1-L116)
- [IocContainer.cs](file://GFramework.Core/ioc/IocContainer.cs#L1-L373)
- [ArchitectureServices.cs](file://GFramework.Core/architecture/ArchitectureServices.cs#L1-L106)
- [Architecture.cs](file://GFramework.Core/architecture/Architecture.cs#L1-L569)
- [AbstractSystem.cs](file://GFramework.Core/system/AbstractSystem.cs#L1-L62)
- [AbstractModel.cs](file://GFramework.Core/model/AbstractModel.cs#L1-L34)
- [ContextAwareBase.cs](file://GFramework.Core/rule/ContextAwareBase.cs#L1-L43)
- [IContextAware.cs](file://GFramework.Core.Abstractions/rule/IContextAware.cs#L1-L21)
## 架构总览
下图展示了依赖注入在架构中的位置与交互路径:架构服务聚合容器与总线;架构基类在初始化阶段注册组件并冻结容器;系统/模型通过上下文感知获取依赖;日志工厂提供统一日志能力。
```mermaid
graph TB
Arch["Architecture 架构基类"]
Svc["ArchitectureServices 架构服务"]
Ctn["IocContainer 容器"]
EB["EventBus 事件总线"]
CB["CommandBus 命令总线"]
QB["QueryBus 查询总线"]
ACB["AsyncQueryBus 异步查询总线"]
Arch --> Svc
Svc --> Ctn
Svc --> EB
Svc --> CB
Svc --> QB
Svc --> ACB
Arch --> |"注册系统/模型/工具"| Ctn
Arch --> |"冻结容器"| Ctn
```
图表来源
- [Architecture.cs](file://GFramework.Core/architecture/Architecture.cs#L1-L569)
- [ArchitectureServices.cs](file://GFramework.Core/architecture/ArchitectureServices.cs#L1-L106)
- [IocContainer.cs](file://GFramework.Core/ioc/IocContainer.cs#L1-L373)
章节来源
- [Architecture.cs](file://GFramework.Core/architecture/Architecture.cs#L1-L569)
- [ArchitectureServices.cs](file://GFramework.Core/architecture/ArchitectureServices.cs#L1-L106)
- [IocContainer.cs](file://GFramework.Core/ioc/IocContainer.cs#L1-L373)
## 详细组件分析
### 依赖注入容器(IocContainer)
- 注册策略
- RegisterSingleton:单例注册,防重复与冻结保护。
- RegisterPlurality/Register:按具体类型与实现接口同时注册,便于接口解析。
- RegisterSystem:专门注册系统实例,等价于RegisterPlurality。
- 解析策略
- Get:返回首个匹配实例,适合具体类型。
- GetRequired:要求唯一实例,否则抛出异常。
- GetAll/GetAllSorted:返回全部实例,支持排序(系统调度场景)。
- 容器治理
- Freeze:初始化完成后冻结,禁止后续注册。
- Clear/Contains/ContainsInstance:容器清理与存在性检查。
- 线程安全
- 使用ReaderWriterLockSlim实现读写锁,避免并发问题。
```mermaid
classDiagram
class IIocContainer {
+RegisterSingleton(instance)
+RegisterPlurality(instance)
+RegisterSystem(system)
+Register(instance)
+Register(type, instance)
+Get()
+GetRequired()
+GetAll()
+GetAllSorted(comparison)
+Contains()
+ContainsInstance(instance)
+Clear()
+Freeze()
}
class IocContainer {
-ReaderWriterLockSlim _lock
-bool _frozen
-HashSet