# 初始化流程
**本文引用的文件**
- [GFramework.Core/architecture/Architecture.cs](file://GFramework.Core/architecture/Architecture.cs)
- [GFramework.Core/architecture/ArchitectureContext.cs](file://GFramework.Core/architecture/ArchitectureContext.cs)
- [GFramework.Core/architecture/ArchitectureConfiguration.cs](file://GFramework.Core/architecture/ArchitectureConfiguration.cs)
- [GFramework.Core/architecture/ArchitectureConstants.cs](file://GFramework.Core/architecture/ArchitectureConstants.cs)
- [GFramework.Core.Abstractions/architecture/IArchitecture.cs](file://GFramework.Core.Abstractions/architecture/IArchitecture.cs)
- [GFramework.Core.Abstractions/architecture/IAsyncInitializable.cs](file://GFramework.Core.Abstractions/architecture/IAsyncInitializable.cs)
- [GFramework.Core.Abstractions/enums/ArchitecturePhase.cs](file://GFramework.Core.Abstractions/enums/ArchitecturePhase.cs)
- [GFramework.Core/events/ArchitectureEvents.cs](file://GFramework.Core/events/ArchitectureEvents.cs)
- [GFramework.Core.Tests/architecture/TestArchitectureBase.cs](file://GFramework.Core.Tests/architecture/TestArchitectureBase.cs)
- [GFramework.Core.Tests/architecture/AsyncTestArchitecture.cs](file://GFramework.Core.Tests/architecture/AsyncTestArchitecture.cs)
- [GFramework.Core.Tests/architecture/SyncTestArchitecture.cs](file://GFramework.Core.Tests/architecture/SyncTestArchitecture.cs)
- [GFramework.Core.Tests/model/AsyncTestModel.cs](file://GFramework.Core.Tests/model/AsyncTestModel.cs)
- [GFramework.Core.Tests/system/AsyncTestSystem.cs](file://GFramework.Core.Tests/system/AsyncTestSystem.cs)
## 目录
1. [简介](#简介)
2. [项目结构](#项目结构)
3. [核心组件](#核心组件)
4. [架构总览](#架构总览)
5. [详细组件分析](#详细组件分析)
6. [依赖分析](#依赖分析)
7. [性能考虑](#性能考虑)
8. [故障排查指南](#故障排查指南)
9. [结论](#结论)
10. [附录](#附录)
## 简介
本文件聚焦于 GFramework 的架构初始化流程,系统性解析以下主题:
- Initialize 与 InitializeAsync 的区别及适用场景
- InitializeInternalAsync 的完整初始化步骤与阶段划分
- 基础环境设置、架构上下文初始化、用户自定义初始化、组件初始化分组、容器冻结与就绪通知
- 异步初始化模式(asyncMode)的选择与 IAsyncInitializable 接口支持
- 初始化失败处理机制与 ArchitecturePhase.FailedInitialization 的触发条件
- 初始化流程时序图与同步/异步最佳实践示例
## 项目结构
围绕初始化流程的关键代码分布在以下模块:
- 核心架构与上下文:Architecture、ArchitectureContext
- 架构阶段与常量:ArchitecturePhase、ArchitectureConstants
- 配置与事件:ArchitectureConfiguration、ArchitectureEvents
- 接口契约:IArchitecture、IAsyncInitializable
- 测试样例:TestArchitectureBase、AsyncTestArchitecture、SyncTestArchitecture、AsyncTestModel、AsyncTestSystem
```mermaid
graph TB
subgraph "核心"
A["Architecture
初始化入口与流程控制"]
Ctx["ArchitectureContext
服务与组件访问"]
Conf["ArchitectureConfiguration
日志与架构属性"]
Const["ArchitectureConstants
阶段顺序与转换"]
Phase["ArchitecturePhase
阶段枚举"]
Events["ArchitectureEvents
生命周期事件"]
end
subgraph "接口"
IA["IArchitecture
架构接口"]
IAI["IAsyncInitializable
异步初始化接口"]
end
subgraph "测试"
TBase["TestArchitectureBase
测试基类"]
TA["AsyncTestArchitecture
异步架构"]
TS["SyncTestArchitecture
同步架构"]
TM["AsyncTestModel
异步模型"]
TSys["AsyncTestSystem
异步系统"]
end
IA --> A
IAI --> A
A --> Ctx
A --> Conf
A --> Const
A --> Phase
A --> Events
TBase --> A
TA --> TBase
TS --> TBase
TM --> IAI
TSys --> IAI
```
图表来源
- [GFramework.Core/architecture/Architecture.cs](file://GFramework.Core/architecture/Architecture.cs#L23-L569)
- [GFramework.Core/architecture/ArchitectureContext.cs](file://GFramework.Core/architecture/ArchitectureContext.cs#L16-L225)
- [GFramework.Core/architecture/ArchitectureConfiguration.cs](file://GFramework.Core/architecture/ArchitectureConfiguration.cs#L12-L35)
- [GFramework.Core/architecture/ArchitectureConstants.cs](file://GFramework.Core/architecture/ArchitectureConstants.cs#L9-L54)
- [GFramework.Core.Abstractions/architecture/IArchitecture.cs](file://GFramework.Core.Abstractions/architecture/IArchitecture.cs#L11-L68)
- [GFramework.Core.Abstractions/architecture/IAsyncInitializable.cs](file://GFramework.Core.Abstractions/architecture/IAsyncInitializable.cs#L8-L15)
- [GFramework.Core.Abstractions/enums/ArchitecturePhase.cs](file://GFramework.Core.Abstractions/enums/ArchitecturePhase.cs#L10-L66)
- [GFramework.Core/events/ArchitectureEvents.cs](file://GFramework.Core/events/ArchitectureEvents.cs#L6-L31)
- [GFramework.Core.Tests/architecture/TestArchitectureBase.cs](file://GFramework.Core.Tests/architecture/TestArchitectureBase.cs#L10-L58)
- [GFramework.Core.Tests/architecture/AsyncTestArchitecture.cs](file://GFramework.Core.Tests/architecture/AsyncTestArchitecture.cs#L9-L22)
- [GFramework.Core.Tests/architecture/SyncTestArchitecture.cs](file://GFramework.Core.Tests/architecture/SyncTestArchitecture.cs#L9-L20)
- [GFramework.Core.Tests/model/AsyncTestModel.cs](file://GFramework.Core.Tests/model/AsyncTestModel.cs#L10-L48)
- [GFramework.Core.Tests/system/AsyncTestSystem.cs](file://GFramework.Core.Tests/system/AsyncTestSystem.cs#L10-L46)
章节来源
- [GFramework.Core/architecture/Architecture.cs](file://GFramework.Core/architecture/Architecture.cs#L23-L569)
- [GFramework.Core/architecture/ArchitectureContext.cs](file://GFramework.Core/architecture/ArchitectureContext.cs#L16-L225)
- [GFramework.Core/architecture/ArchitectureConfiguration.cs](file://GFramework.Core/architecture/ArchitectureConfiguration.cs#L12-L35)
- [GFramework.Core/architecture/ArchitectureConstants.cs](file://GFramework.Core/architecture/ArchitectureConstants.cs#L9-L54)
- [GFramework.Core.Abstractions/architecture/IArchitecture.cs](file://GFramework.Core.Abstractions/architecture/IArchitecture.cs#L11-L68)
- [GFramework.Core.Abstractions/architecture/IAsyncInitializable.cs](file://GFramework.Core.Abstractions/architecture/IAsyncInitializable.cs#L8-L15)
- [GFramework.Core.Abstractions/enums/ArchitecturePhase.cs](file://GFramework.Core.Abstractions/enums/ArchitecturePhase.cs#L10-L66)
- [GFramework.Core/events/ArchitectureEvents.cs](file://GFramework.Core/events/ArchitectureEvents.cs#L6-L31)
- [GFramework.Core.Tests/architecture/TestArchitectureBase.cs](file://GFramework.Core.Tests/architecture/TestArchitectureBase.cs#L10-L58)
- [GFramework.Core.Tests/architecture/AsyncTestArchitecture.cs](file://GFramework.Core.Tests/architecture/AsyncTestArchitecture.cs#L9-L22)
- [GFramework.Core.Tests/architecture/SyncTestArchitecture.cs](file://GFramework.Core.Tests/architecture/SyncTestArchitecture.cs#L9-L20)
- [GFramework.Core.Tests/model/AsyncTestModel.cs](file://GFramework.Core.Tests/model/AsyncTestModel.cs#L10-L48)
- [GFramework.Core.Tests/system/AsyncTestSystem.cs](file://GFramework.Core.Tests/system/AsyncTestSystem.cs#L10-L46)
## 核心组件
- Architecture:提供 Initialize/InitializeAsync 入口,驱动 InitializeInternalAsync 完成初始化;负责阶段推进、事件通知、组件注册与销毁。
- ArchitectureContext:基于 IOC 容器的服务缓存与组件检索,封装命令/查询/事件的派发。
- ArchitectureConfiguration:默认日志工厂与架构属性(如是否允许后期注册、是否严格阶段校验)。
- ArchitectureConstants:阶段顺序与允许的阶段转换映射,定义 FailedInitialization 的“任意可达”特性。
- IArchitecture:继承 IAsyncInitializable,暴露 Initialize/Destroy、组件注册与模块安装等能力。
- IAsyncInitializable:定义 InitializeAsync 异步初始化契约。
- ArchitecturePhase:线性阶段序列,贯穿初始化与销毁全过程。
- ArchitectureEvents:初始化就绪、销毁中/完成、初始化失败等事件。
章节来源
- [GFramework.Core/architecture/Architecture.cs](file://GFramework.Core/architecture/Architecture.cs#L23-L569)
- [GFramework.Core/architecture/ArchitectureContext.cs](file://GFramework.Core/architecture/ArchitectureContext.cs#L16-L225)
- [GFramework.Core/architecture/ArchitectureConfiguration.cs](file://GFramework.Core/architecture/ArchitectureConfiguration.cs#L12-L35)
- [GFramework.Core/architecture/ArchitectureConstants.cs](file://GFramework.Core/architecture/ArchitectureConstants.cs#L9-L54)
- [GFramework.Core.Abstractions/architecture/IArchitecture.cs](file://GFramework.Core.Abstractions/architecture/IArchitecture.cs#L11-L68)
- [GFramework.Core.Abstractions/architecture/IAsyncInitializable.cs](file://GFramework.Core.Abstractions/architecture/IAsyncInitializable.cs#L8-L15)
- [GFramework.Core.Abstractions/enums/ArchitecturePhase.cs](file://GFramework.Core.Abstractions/enums/ArchitecturePhase.cs#L10-L66)
- [GFramework.Core/events/ArchitectureEvents.cs](file://GFramework.Core/events/ArchitectureEvents.cs#L6-L31)
## 架构总览
初始化流程由两条主线构成:
- 同步初始化:Initialize 内部通过阻塞等待 InitializeInternalAsync 完成,随后抛出失败阶段或继续。
- 异步初始化:InitializeAsync 直接 await InitializeInternalAsync,便于在 UI 线程或协程中挂起等待。
初始化主流程分为四个阶段:
1) 基础环境与上下文设置
2) 用户 Init 自定义初始化
3) 组件初始化分组(工具/模型/系统)
4) 容器冻结与就绪通知
```mermaid
sequenceDiagram
participant Caller as "调用方"
participant Arch as "Architecture"
participant Ctx as "ArchitectureContext"
participant Cfg as "ArchitectureConfiguration"
participant Const as "ArchitectureConstants"
participant Bus as "事件总线"
Caller->>Arch : "Initialize()/InitializeAsync()"
Arch->>Arch : "InitializeInternalAsync(asyncMode)"
Arch->>Cfg : "读取日志与架构属性"
Arch->>Arch : "Environment.Initialize()"
Arch->>Ctx : "创建/绑定上下文"
Arch->>Arch : "Services.SetContext(ctx)"
Arch->>Arch : "Init()用户自定义"
Arch->>Arch : "InitializeAllComponentsAsync(asyncMode)"
Arch->>Arch : "EnterPhase(Ready)"
Arch->>Bus : "发送就绪事件"
Arch-->>Caller : "完成/抛出异常"
```
图表来源
- [GFramework.Core/architecture/Architecture.cs](file://GFramework.Core/architecture/Architecture.cs#L492-L566)
- [GFramework.Core/architecture/ArchitectureContext.cs](file://GFramework.Core/architecture/ArchitectureContext.cs#L16-L225)
- [GFramework.Core/architecture/ArchitectureConfiguration.cs](file://GFramework.Core/architecture/ArchitectureConfiguration.cs#L12-L35)
- [GFramework.Core/architecture/ArchitectureConstants.cs](file://GFramework.Core/architecture/ArchitectureConstants.cs#L9-L54)
- [GFramework.Core/events/ArchitectureEvents.cs](file://GFramework.Core/events/ArchitectureEvents.cs#L6-L31)
## 详细组件分析
### Initialize 与 InitializeAsync 的区别与使用场景
- Initialize
- 语义:阻塞式同步初始化,适合控制台应用或可安全阻塞的场景。
- 实现:内部通过 GetAwaiter().GetResult() 等待 InitializeInternalAsync 完成,若异常则进入 FailedInitialization 并抛出。
- InitializeAsync
- 语义:非阻塞式异步初始化,适合 Unity 主线程协程、UI 线程或需要并发控制的场景。
- 实现:直接 await InitializeInternalAsync,异常同上处理。
章节来源
- [GFramework.Core/architecture/Architecture.cs](file://GFramework.Core/architecture/Architecture.cs#L492-L524)
### InitializeInternalAsync 的完整步骤
- 基础环境与上下文设置
- 设置日志工厂提供程序与最小日志级别
- 初始化 Environment
- 创建/绑定 ArchitectureContext,设置 Services.Context
- 用户 Init
- 调用受保护的 Init(),由子类实现注册组件与自定义逻辑
- 组件初始化分组
- 工具(IContextUtility)、模型(IModel)、系统(ISystem)三类分组初始化
- 每组在 Before*/After* 阶段间执行,支持异步/同步初始化
- 初始化完成
- 冻结 IOC 容器,标记已初始化
- 进入 Ready 阶段,发布 ArchitectureLifecycleReadyEvent
章节来源
- [GFramework.Core/architecture/Architecture.cs](file://GFramework.Core/architecture/Architecture.cs#L531-L566)
- [GFramework.Core/architecture/ArchitectureContext.cs](file://GFramework.Core/architecture/ArchitectureContext.cs#L16-L225)
- [GFramework.Core/architecture/ArchitectureConfiguration.cs](file://GFramework.Core/architecture/ArchitectureConfiguration.cs#L12-L35)
- [GFramework.Core/events/ArchitectureEvents.cs](file://GFramework.Core/events/ArchitectureEvents.cs#L6-L31)
### 组件初始化分组与阶段推进
- 分组策略
- 工具:IContextUtility,先 AfterUtilityInit 再 BeforeModelInit
- 模型:IModel,先 AfterModelInit 再 BeforeSystemInit
- 系统:ISystem,最后 AfterSystemInit
- 阶段推进
- 每个分组前后均进入对应 Before*/After* 阶段
- 严格线性顺序,受 ArchitectureConstants 控制
- 异步支持
- asyncMode=true 且组件实现 IAsyncInitializable 时调用 InitializeAsync
- 否则调用 Init()
```mermaid
flowchart TD
Start(["开始 InitializeInternalAsync"]) --> Env["设置日志与环境
创建/绑定上下文"]
Env --> UserInit["调用用户 Init()"]
UserInit --> Group["分组初始化:工具/模型/系统"]
Group --> Freeze["冻结 IOC 容器"]
Freeze --> Ready["进入 Ready 阶段并发布就绪事件"]
Ready --> End(["结束"])
subgraph "分组初始化"
U["工具:BeforeUtilityInit → AfterUtilityInit"]
M["模型:BeforeModelInit → AfterModelInit"]
S["系统:BeforeSystemInit → AfterSystemInit"]
end
Group --> U --> M --> S
```
图表来源
- [GFramework.Core/architecture/Architecture.cs](file://GFramework.Core/architecture/Architecture.cs#L531-L566)
- [GFramework.Core/architecture/ArchitectureConstants.cs](file://GFramework.Core/architecture/ArchitectureConstants.cs#L9-L54)
章节来源
- [GFramework.Core/architecture/Architecture.cs](file://GFramework.Core/architecture/Architecture.cs#L264-L330)
- [GFramework.Core/architecture/ArchitectureConstants.cs](file://GFramework.Core/architecture/ArchitectureConstants.cs#L9-L54)
### 异步初始化模式(asyncMode)与 IAsyncInitializable 支持
- asyncMode 选择
- true:优先尝试 IAsyncInitializable.InitializeAsync
- false:回退到 IInitializable.Init
- IAsyncInitializable
- 作为 IArchitecture 的父接口,保证架构自身具备异步初始化能力
- 组件若实现该接口,将在 InitializeAllComponentsAsync 中被识别并异步初始化
章节来源
- [GFramework.Core/architecture/Architecture.cs](file://GFramework.Core/architecture/Architecture.cs#L337-L347)
- [GFramework.Core.Abstractions/architecture/IAsyncInitializable.cs](file://GFramework.Core.Abstractions/architecture/IAsyncInitializable.cs#L8-L15)
- [GFramework.Core.Abstractions/architecture/IArchitecture.cs](file://GFramework.Core.Abstractions/architecture/IArchitecture.cs#L11-L12)
### 初始化失败处理与 FailedInitialization 触发
- 触发条件
- Initialize/InitializeAsync 在执行 InitializeInternalAsync 期间抛出异常
- 处理流程
- 记录错误日志
- 进入 ArchitecturePhase.FailedInitialization
- 发布 ArchitectureFailedInitializationEvent
- 重新抛出异常
- 阶段特性
- FailedInitialization 可从任意阶段转换而来,便于兜底恢复
章节来源
- [GFramework.Core/architecture/Architecture.cs](file://GFramework.Core/architecture/Architecture.cs#L494-L504)
- [GFramework.Core/architecture/Architecture.cs](file://GFramework.Core/architecture/Architecture.cs#L513-L523)
- [GFramework.Core/architecture/Architecture.cs](file://GFramework.Core/architecture/Architecture.cs#L164-L183)
- [GFramework.Core.Abstractions/enums/ArchitecturePhase.cs](file://GFramework.Core.Abstractions/enums/ArchitecturePhase.cs#L62-L66)
- [GFramework.Core/events/ArchitectureEvents.cs](file://GFramework.Core/events/ArchitectureEvents.cs#L26-L31)
### 阶段推进与事件通知
- EnterPhase
- 校验阶段转换合法性(受 ArchitectureProperties.StrictPhaseValidation 控制)
- 通知生命周期钩子与架构阶段感知对象
- ArchitectureConstants
- 定义线性阶段顺序与允许转换
- FailedInitialization 作为“任意可达”的失败路径
章节来源
- [GFramework.Core/architecture/Architecture.cs](file://GFramework.Core/architecture/Architecture.cs#L142-L209)
- [GFramework.Core/architecture/ArchitectureConstants.cs](file://GFramework.Core/architecture/ArchitectureConstants.cs#L9-L54)
- [GFramework.Core/architecture/ArchitectureConfiguration.cs](file://GFramework.Core/architecture/ArchitectureConfiguration.cs#L30-L34)
### 使用示例与最佳实践
- 同步初始化(控制台/后台)
- 适用于无需 UI 协程或阻塞可控的场景
- 示例参考:[GFramework.Core.Tests/architecture/SyncTestArchitecture.cs](file://GFramework.Core.Tests/architecture/SyncTestArchitecture.cs#L9-L20)
- 异步初始化(Unity/前端)
- 适用于主线程协程或需要避免阻塞 UI 的场景
- 示例参考:[GFramework.Core.Tests/architecture/AsyncTestArchitecture.cs](file://GFramework.Core.Tests/architecture/AsyncTestArchitecture.cs#L9-L22)
- 组件异步初始化
- 模型/系统实现 IAsyncInitializable,InitializeAsync 中执行异步逻辑
- 示例参考:[GFramework.Core.Tests/model/AsyncTestModel.cs](file://GFramework.Core.Tests/model/AsyncTestModel.cs#L10-L48)、[GFramework.Core.Tests/system/AsyncTestSystem.cs](file://GFramework.Core.Tests/system/AsyncTestSystem.cs#L10-L46)
- 阶段感知与事件监听
- 通过 ArchitectureContext.RegisterEvent 订阅就绪事件
- 示例参考:[GFramework.Core.Tests/architecture/TestArchitectureBase.cs](file://GFramework.Core.Tests/architecture/TestArchitectureBase.cs#L41-L46)
章节来源
- [GFramework.Core.Tests/architecture/SyncTestArchitecture.cs](file://GFramework.Core.Tests/architecture/SyncTestArchitecture.cs#L9-L20)
- [GFramework.Core.Tests/architecture/AsyncTestArchitecture.cs](file://GFramework.Core.Tests/architecture/AsyncTestArchitecture.cs#L9-L22)
- [GFramework.Core.Tests/model/AsyncTestModel.cs](file://GFramework.Core.Tests/model/AsyncTestModel.cs#L10-L48)
- [GFramework.Core.Tests/system/AsyncTestSystem.cs](file://GFramework.Core.Tests/system/AsyncTestSystem.cs#L10-L46)
- [GFramework.Core.Tests/architecture/TestArchitectureBase.cs](file://GFramework.Core.Tests/architecture/TestArchitectureBase.cs#L41-L46)
## 依赖分析
- Architecture 对各子系统(环境、上下文、服务、事件总线、IOC 容器)存在强耦合,负责统一调度
- 组件注册遵循生命周期:先注册到 IOC,再登记到待初始化队列,最后在 Ready 前完成初始化
- 阶段推进依赖 ArchitectureConstants 的线性约束,FailedInitialization 作为兜底路径
```mermaid
graph LR
Arch["Architecture"] --> Ctx["ArchitectureContext"]
Arch --> Env["Environment"]
Arch --> Svc["Services"]
Arch --> Bus["EventBus"]
Arch --> Cfg["ArchitectureConfiguration"]
Arch --> Const["ArchitectureConstants"]
Arch --> Phase["ArchitecturePhase"]
Arch --> IA["IArchitecture"]
Arch --> IAI["IAsyncInitializable"]
```
图表来源
- [GFramework.Core/architecture/Architecture.cs](file://GFramework.Core/architecture/Architecture.cs#L23-L569)
- [GFramework.Core/architecture/ArchitectureContext.cs](file://GFramework.Core/architecture/ArchitectureContext.cs#L16-L225)
- [GFramework.Core/architecture/ArchitectureConfiguration.cs](file://GFramework.Core/architecture/ArchitectureConfiguration.cs#L12-L35)
- [GFramework.Core/architecture/ArchitectureConstants.cs](file://GFramework.Core/architecture/ArchitectureConstants.cs#L9-L54)
- [GFramework.Core.Abstractions/architecture/IArchitecture.cs](file://GFramework.Core.Abstractions/architecture/IArchitecture.cs#L11-L68)
- [GFramework.Core.Abstractions/architecture/IAsyncInitializable.cs](file://GFramework.Core.Abstractions/architecture/IAsyncInitializable.cs#L8-L15)
- [GFramework.Core.Abstractions/enums/ArchitecturePhase.cs](file://GFramework.Core.Abstractions/enums/ArchitecturePhase.cs#L10-L66)
章节来源
- [GFramework.Core/architecture/Architecture.cs](file://GFramework.Core/architecture/Architecture.cs#L23-L569)
- [GFramework.Core/architecture/ArchitectureContext.cs](file://GFramework.Core/architecture/ArchitectureContext.cs#L16-L225)
- [GFramework.Core/architecture/ArchitectureConfiguration.cs](file://GFramework.Core/architecture/ArchitectureConfiguration.cs#L12-L35)
- [GFramework.Core/architecture/ArchitectureConstants.cs](file://GFramework.Core/architecture/ArchitectureConstants.cs#L9-L54)
- [GFramework.Core.Abstractions/architecture/IArchitecture.cs](file://GFramework.Core.Abstractions/architecture/IArchitecture.cs#L11-L68)
- [GFramework.Core.Abstractions/architecture/IAsyncInitializable.cs](file://GFramework.Core.Abstractions/architecture/IAsyncInitializable.cs#L8-L15)
- [GFramework.Core.Abstractions/enums/ArchitecturePhase.cs](file://GFramework.Core.Abstractions/enums/ArchitecturePhase.cs#L10-L66)
## 性能考虑
- 组件分组初始化按类型顺序执行,避免跨类型依赖导致的死锁
- InitializeAllComponentsAsync 在每组内串行初始化,保证依赖顺序;如需并行,可在组件内部自行拆分子任务
- IOC 容器在 Ready 前冻结,有助于减少后续解析开销
- 日志级别与工厂提供程序可通过 ArchitectureConfiguration 调整,避免过度日志影响性能
## 故障排查指南
- 初始化失败
- 现象:抛出异常并进入 FailedInitialization
- 排查:检查 InitializeInternalAsync 中的用户 Init 与组件 InitializeAsync 是否正确实现
- 参考:[GFramework.Core/architecture/Architecture.cs](file://GFramework.Core/architecture/Architecture.cs#L494-L504)、[GFramework.Core/architecture/Architecture.cs](file://GFramework.Core/architecture/Architecture.cs#L513-L523)
- 阶段转换异常
- 现象:抛出非法阶段转换异常
- 排查:确认是否启用了严格阶段校验,以及转换是否在允许列表内
- 参考:[GFramework.Core/architecture/Architecture.cs](file://GFramework.Core/architecture/Architecture.cs#L164-L183)、[GFramework.Core/architecture/ArchitectureConstants.cs](file://GFramework.Core/architecture/ArchitectureConstants.cs#L38-L54)
- 组件注册时机
- 现象:在 Ready 后注册组件抛出异常
- 排查:调整 ArchitectureConfiguration.ArchitectureProperties.AllowLateRegistration 或在 Ready 前完成注册
- 参考:[GFramework.Core/architecture/Architecture.cs](file://GFramework.Core/architecture/Architecture.cs#L407-L414)
章节来源
- [GFramework.Core/architecture/Architecture.cs](file://GFramework.Core/architecture/Architecture.cs#L494-L504)
- [GFramework.Core/architecture/Architecture.cs](file://GFramework.Core/architecture/Architecture.cs#L513-L523)
- [GFramework.Core/architecture/Architecture.cs](file://GFramework.Core/architecture/Architecture.cs#L164-L183)
- [GFramework.Core/architecture/ArchitectureConstants.cs](file://GFramework.Core/architecture/ArchitectureConstants.cs#L38-L54)
- [GFramework.Core/architecture/Architecture.cs](file://GFramework.Core/architecture/Architecture.cs#L407-L414)
## 结论
GFramework 的初始化流程以 Architecture 为核心,通过 Initialize/InitializeAsync 提供同步与异步两种模式,借助 ArchitectureContext、ArchitectureConfiguration、ArchitectureConstants 与 ArchitecturePhase 形成清晰的生命周期与阶段控制。InitializeInternalAsync 将初始化拆解为基础环境设置、用户 Init、组件分组初始化与容器冻结四个阶段,既保证了初始化顺序与一致性,又通过 IAsyncInitializable 支持异步组件。失败路径通过 FailedInitialization 与事件机制提供兜底,便于上层进行恢复与诊断。
## 附录
- 关键接口与职责
- IArchitecture:架构入口与生命周期管理
- IAsyncInitializable:异步初始化契约
- ArchitecturePhase:阶段枚举与线性顺序
- ArchitectureEvents:生命周期事件
- 测试参考
- 同步/异步架构与组件示例,便于对照验证初始化行为
章节来源
- [GFramework.Core.Abstractions/architecture/IArchitecture.cs](file://GFramework.Core.Abstractions/architecture/IArchitecture.cs#L11-L68)
- [GFramework.Core.Abstractions/architecture/IAsyncInitializable.cs](file://GFramework.Core.Abstractions/architecture/IAsyncInitializable.cs#L8-L15)
- [GFramework.Core.Abstractions/enums/ArchitecturePhase.cs](file://GFramework.Core.Abstractions/enums/ArchitecturePhase.cs#L10-L66)
- [GFramework.Core/events/ArchitectureEvents.cs](file://GFramework.Core/events/ArchitectureEvents.cs#L6-L31)
- [GFramework.Core.Tests/architecture/AsyncTestArchitecture.cs](file://GFramework.Core.Tests/architecture/AsyncTestArchitecture.cs#L9-L22)
- [GFramework.Core.Tests/architecture/SyncTestArchitecture.cs](file://GFramework.Core.Tests/architecture/SyncTestArchitecture.cs#L9-L20)
- [GFramework.Core.Tests/model/AsyncTestModel.cs](file://GFramework.Core.Tests/model/AsyncTestModel.cs#L10-L48)
- [GFramework.Core.Tests/system/AsyncTestSystem.cs](file://GFramework.Core.Tests/system/AsyncTestSystem.cs#L10-L46)