mirror of
https://github.com/GeWuYou/GFramework.git
synced 2026-03-26 06:16:43 +08:00
- 新增 Core API 参考文档,涵盖架构与模块、数据模型与系统、命令与查询等核心组件 - 添加事件系统接口详细文档,包括 IEvent、IEventBus、IUnRegister 等接口说明 - 提供完整的 API 使用示例路径、最佳实践与性能建议 - 包含架构图、依赖关系图与故障排查指南 - 添加测试用例参考与扩展方法说明 - [skip ci]
16 KiB
16 KiB
依赖注入系统
**本文档引用的文件** - [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)目录
简介
本文件面向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
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
- IocContainer.cs
- IInitializable.cs
- IDisposable.cs
- ILifecycle.cs
- Architecture.cs
- IocContainerTests.cs
章节来源
核心组件
- IIocContainer:定义注册、解析、查询与容器管理的契约,涵盖单例、多实现、系统实例注册,以及Get/GetAll/GetRequired等解析方法。
- IocContainer:IIocContainer的具体实现,提供基于字典+集合的索引结构、读写锁的线程安全、容器冻结保护、日志记录与错误处理。
- 生命周期接口:IInitializable、IDisposable、ILifecycle,为组件提供初始化与销毁的标准能力,便于与容器生命周期协同。
章节来源
架构总览
IocContainer作为架构(Architecture)的核心组件之一,贯穿System/Model/Utility的注册与获取。容器采用“手动注册、类型安全、线程安全、容器冻结”的设计,避免自动解析带来的复杂度,强调可控的生命周期与清晰的依赖关系。
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<T>()"
Arch->>C : "Get<T>()"
C->>C : "读锁 + 查找类型索引"
C-->>Arch : "返回实例或null"
Arch-->>App : "返回实例"
图表来源
详细组件分析
IocContainer 实现与设计模式
- 设计模式:控制反转(IoC)与简单工厂结合,通过接口隔离与具体实现解耦。
- 数据结构:
- _objects:HashSet