# 插件系统开发 **本文引用的文件** - [IArchitectureModule.cs](file://GFramework.Core.Abstractions/architecture/IArchitectureModule.cs) - [AbstractModule.cs](file://GFramework.Game/architecture/AbstractModule.cs) - [IGodotModule.cs](file://GFramework.Godot/architecture/IGodotModule.cs) - [AbstractGodotModule.cs](file://GFramework.Godot/architecture/AbstractGodotModule.cs) - [Architecture.cs](file://GFramework.Core/architecture/Architecture.cs) - [ArchitectureConstants.cs](file://GFramework.Core/architecture/ArchitectureConstants.cs) - [ArchitectureContext.cs](file://GFramework.Core/architecture/ArchitectureContext.cs) - [IocContainer.cs](file://GFramework.Core/ioc/IocContainer.cs) - [AbstractArchitecture.cs](file://GFramework.Godot/architecture/AbstractArchitecture.cs) - [ArchitecturePhase.cs](file://GFramework.Core.Abstractions/enums/ArchitecturePhase.cs) - [EventBus.cs](file://GFramework.Core/events/EventBus.cs) - [README.md(GFramework.Core)](file://GFramework.Core/README.md) - [TestArchitectureBase.cs](file://GFramework.Core.Tests/architecture/TestArchitectureBase.cs) - [AsyncTestArchitecture.cs](file://GFramework.Core.Tests/architecture/AsyncTestArchitecture.cs) - [SyncTestArchitecture.cs](file://GFramework.Core.Tests/architecture/SyncTestArchitecture.cs) ## 目录 1. [简介](#简介) 2. [项目结构](#项目结构) 3. [核心组件](#核心组件) 4. [架构总览](#架构总览) 5. [详细组件分析](#详细组件分析) 6. [依赖分析](#依赖分析) 7. [性能考虑](#性能考虑) 8. [故障排查指南](#故障排查指南) 9. [结论](#结论) 10. [附录](#附录) ## 简介 本教程面向希望在 GFramework 中开发“插件系统”的开发者,系统讲解模块化架构的实现原理与工程实践,涵盖模块生命周期管理、动态加载与卸载、模块间通信、服务发现与依赖注入、热插拔与模块数据共享/事件传递等主题。教程以 GFramework.Core 为核心,结合 Godot 平台扩展,给出可落地的实现步骤与最佳实践。 ## 项目结构 GFramework 将“插件系统”抽象为“架构模块”,通过统一的生命周期与依赖注入容器实现模块的安装、注册、阶段通知与销毁。Godot 平台提供了基于节点的模块扩展能力,支持热插拔与场景树生命周期绑定。 ```mermaid graph TB subgraph "核心层GFramework.Core" A["Architecture
架构基类"] B["IocContainer
IoC 容器"] C["ArchitectureContext
架构上下文"] D["EventBus
事件总线"] E["ArchitectureConstants
阶段常量"] F["ArchitecturePhase
阶段枚举"] end subgraph "游戏层GFramework.Game" G["AbstractModule
抽象模块"] end subgraph "Godot 平台层GFramework.Godot" H["IGodotModule
Godot 模块接口"] I["AbstractGodotModule
Godot 抽象模块"] J["AbstractArchitecture
Godot 架构"] end A --> B A --> C A --> D A --> E A --> F G --> A H --> A I --> H J --> A ``` **图表来源** - [Architecture.cs](file://GFramework.Core/architecture/Architecture.cs#L23-L569) - [IocContainer.cs](file://GFramework.Core/ioc/IocContainer.cs#L12-L373) - [ArchitectureContext.cs](file://GFramework.Core/architecture/ArchitectureContext.cs#L16-L225) - [EventBus.cs](file://GFramework.Core/events/EventBus.cs#L8-L55) - [ArchitectureConstants.cs](file://GFramework.Core/architecture/ArchitectureConstants.cs#L9-L54) - [ArchitecturePhase.cs](file://GFramework.Core.Abstractions/enums/ArchitecturePhase.cs#L10-L66) - [AbstractModule.cs](file://GFramework.Game/architecture/AbstractModule.cs#L9-L33) - [IGodotModule.cs](file://GFramework.Godot/architecture/IGodotModule.cs#L10-L27) - [AbstractGodotModule.cs](file://GFramework.Godot/architecture/AbstractGodotModule.cs#L11-L55) - [AbstractArchitecture.cs](file://GFramework.Godot/architecture/AbstractArchitecture.cs#L14-L140) **章节来源** - [README.md(GFramework.Core)](file://GFramework.Core/README.md#L1-L508) ## 核心组件 - 架构模块接口与实现 - IArchitectureModule:定义模块安装到架构的标准方法与生命周期感知。 - AbstractModule(游戏层):提供默认的阶段回调空实现,便于继承扩展。 - IGodotModule / AbstractGodotModule(Godot 层):在架构基础上增加节点关联、附加/分离回调,适配 Godot 场景树生命周期。 - 架构基类 Architecture - 提供 InstallModule、RegisterSystem/Model/Utility、Initialize/Destroy、阶段通知与生命周期钩子注册。 - 通过 IocContainer 管理组件注册与获取,通过 ArchitectureContext 提供统一的服务访问入口。 - 平台扩展 AbstractArchitecture - 将架构绑定到 Godot 场景树生命周期,支持 InstallGodotModule 动态安装 Godot 模块节点并触发 OnAttach/OnDetach。 - 事件与阶段 - EventBus 提供事件发布/订阅;ArchitectureConstants/ArchitecturePhase 定义阶段顺序与转换规则。 **章节来源** - [IArchitectureModule.cs](file://GFramework.Core.Abstractions/architecture/IArchitectureModule.cs#L7-L14) - [AbstractModule.cs](file://GFramework.Game/architecture/AbstractModule.cs#L9-L33) - [IGodotModule.cs](file://GFramework.Godot/architecture/IGodotModule.cs#L10-L27) - [AbstractGodotModule.cs](file://GFramework.Godot/architecture/AbstractGodotModule.cs#L11-L55) - [Architecture.cs](file://GFramework.Core/architecture/Architecture.cs#L38-L48) - [AbstractArchitecture.cs](file://GFramework.Godot/architecture/AbstractArchitecture.cs#L56-L68) - [ArchitectureConstants.cs](file://GFramework.Core/architecture/ArchitectureConstants.cs#L38-L54) - [ArchitecturePhase.cs](file://GFramework.Core.Abstractions/enums/ArchitecturePhase.cs#L10-L66) - [EventBus.cs](file://GFramework.Core/events/EventBus.cs#L8-L55) ## 架构总览 下图展示了模块安装、生命周期与事件通知的关键流程,体现“插件系统”的动态性与解耦性。 ```mermaid sequenceDiagram participant Dev as "开发者" participant Arch as "Architecture" participant Mod as "IArchitectureModule/IGodotModule" participant Ctx as "ArchitectureContext" participant Bus as "EventBus" Dev->>Arch : "InstallModule(模块)" Arch->>Arch : "RegisterLifecycleHook(模块)" Arch->>Arch : "Container.RegisterPlurality(模块)" Arch->>Mod : "Install(架构实例)" Arch->>Bus : "通知阶段变更Ready 前" Arch->>Ctx : "冻结容器Ready" Arch->>Bus : "发送 Ready 事件" Note over Arch,Bus : "模块可通过 IArchitecturePhaseAware/IArchitectureLifecycle 接收阶段通知" ``` **图表来源** - [Architecture.cs](file://GFramework.Core/architecture/Architecture.cs#L38-L48) - [Architecture.cs](file://GFramework.Core/architecture/Architecture.cs#L189-L196) - [Architecture.cs](file://GFramework.Core/architecture/Architecture.cs#L202-L209) - [Architecture.cs](file://GFramework.Core/architecture/Architecture.cs#L558-L566) - [ArchitectureContext.cs](file://GFramework.Core/architecture/ArchitectureContext.cs#L26-L41) ## 详细组件分析 ### 模块接口与生命周期 - 模块接口 IArchitectureModule - Install(IArchitecture):模块安装到架构的入口。 - 继承 IArchitectureLifecycle 与 IArchitecturePhaseAware,可接收阶段变化通知。 - 抽象模块 AbstractModule(游戏层) - 提供 OnPhase/OnArchitecturePhase 默认空实现,便于按需覆盖。 - Godot 模块接口 IGodotModule / AbstractGodotModule - Node:模块关联的 Godot 节点。 - OnAttach/OnDetach:模块与场景树节点的附加/分离回调,支持热插拔。 ```mermaid classDiagram class IArchitectureModule { +Install(architecture) } class IArchitectureLifecycle { +OnPhase(phase, architecture) } class IArchitecturePhaseAware { +OnArchitecturePhase(phase) } class AbstractModule { +OnPhase(phase, architecture) +OnArchitecturePhase(phase) +Install(architecture) } class IGodotModule { +Node +OnAttach(architecture) +OnDetach() +Install(architecture) } class AbstractGodotModule { +Node +OnPhase(phase, architecture) +OnArchitecturePhase(phase) +Install(architecture) +OnDetach() +OnAttach(architecture) } IArchitectureModule <|.. AbstractModule IArchitectureModule <|.. AbstractGodotModule IArchitectureModule ..|> IArchitectureLifecycle IArchitectureModule ..|> IArchitecturePhaseAware IGodotModule <|.. AbstractGodotModule ``` **图表来源** - [IArchitectureModule.cs](file://GFramework.Core.Abstractions/architecture/IArchitectureModule.cs#L7-L14) - [AbstractModule.cs](file://GFramework.Game/architecture/AbstractModule.cs#L9-L33) - [IGodotModule.cs](file://GFramework.Godot/architecture/IGodotModule.cs#L10-L27) - [AbstractGodotModule.cs](file://GFramework.Godot/architecture/AbstractGodotModule.cs#L11-L55) **章节来源** - [IArchitectureModule.cs](file://GFramework.Core.Abstractions/architecture/IArchitectureModule.cs#L7-L14) - [AbstractModule.cs](file://GFramework.Game/architecture/AbstractModule.cs#L9-L33) - [IGodotModule.cs](file://GFramework.Godot/architecture/IGodotModule.cs#L10-L27) - [AbstractGodotModule.cs](file://GFramework.Godot/architecture/AbstractGodotModule.cs#L11-L55) ### 架构安装与生命周期管理 - InstallModule - 注册生命周期钩子、向容器注册模块、调用模块 Install 并记录日志。 - Initialize/Destroy - Initialize 分阶段初始化工具、模型、系统,冻结容器并进入 Ready,发送 Ready 事件。 - Destroy 逆序销毁可销毁组件,发送销毁事件。 - 阶段转换与通知 - EnterPhase 校验转换合法性,通知 IArchitecturePhaseAware 与生命周期钩子。 ```mermaid flowchart TD Start(["开始:InstallModule"]) --> RegHook["注册生命周期钩子"] RegHook --> RegPlurality["向容器注册模块"] RegPlurality --> CallInstall["调用模块 Install"] CallInstall --> Ready["进入 Ready 阶段"] Ready --> Notify["通知阶段感知对象"] Notify --> Frozen["冻结容器"] Frozen --> End(["结束"]) DestroyStart(["开始:Destroy"]) --> SendDestroying["发送 Destroying 事件"] SendDestroying --> DisposeLoop["逆序销毁组件"] DisposeLoop --> SendDestroyed["发送 Destroyed 事件"] SendDestroyed --> DestroyEnd(["结束"]) ``` **图表来源** - [Architecture.cs](file://GFramework.Core/architecture/Architecture.cs#L38-L48) - [Architecture.cs](file://GFramework.Core/architecture/Architecture.cs#L142-L157) - [Architecture.cs](file://GFramework.Core/architecture/Architecture.cs#L216-L223) - [Architecture.cs](file://GFramework.Core/architecture/Architecture.cs#L558-L566) - [Architecture.cs](file://GFramework.Core/architecture/Architecture.cs#L357-L396) **章节来源** - [Architecture.cs](file://GFramework.Core/architecture/Architecture.cs#L38-L48) - [Architecture.cs](file://GFramework.Core/architecture/Architecture.cs#L142-L157) - [Architecture.cs](file://GFramework.Core/architecture/Architecture.cs#L216-L223) - [Architecture.cs](file://GFramework.Core/architecture/Architecture.cs#L558-L566) - [Architecture.cs](file://GFramework.Core/architecture/Architecture.cs#L357-L396) ### 服务发现与依赖注入 - IocContainer - Register/RegisterPlurality:注册单例或多实现实例,按类型索引。 - Get/GetRequired/GetAll:按类型获取实例,支持排序获取。 - Freeze:冻结容器,禁止后续注册,保证运行期稳定性。 - ArchitectureContext - 通过容器缓存服务实例,提供 GetService/GetSystem/GetModel/GetUtility。 - 统一封装命令、查询、事件的发送与注册。 ```mermaid classDiagram class IocContainer { +RegisterSingleton(instance) +RegisterPlurality(instance) +Register(type, instance) +Get() +GetRequired() +GetAll() +Freeze() } class ArchitectureContext { +GetService() +GetSystem() +GetModel() +GetUtility() +SendCommand(...) +SendQuery(...) +SendEvent(...) +RegisterEvent(handler) } ArchitectureContext --> IocContainer : "使用" ``` **图表来源** - [IocContainer.cs](file://GFramework.Core/ioc/IocContainer.cs#L69-L123) - [IocContainer.cs](file://GFramework.Core/ioc/IocContainer.cs#L211-L289) - [IocContainer.cs](file://GFramework.Core/ioc/IocContainer.cs#L357-L370) - [ArchitectureContext.cs](file://GFramework.Core/architecture/ArchitectureContext.cs#L26-L41) - [ArchitectureContext.cs](file://GFramework.Core/architecture/ArchitectureContext.cs#L82-L105) - [ArchitectureContext.cs](file://GFramework.Core/architecture/ArchitectureContext.cs#L115-L160) - [ArchitectureContext.cs](file://GFramework.Core/architecture/ArchitectureContext.cs#L169-L212) **章节来源** - [IocContainer.cs](file://GFramework.Core/ioc/IocContainer.cs#L69-L123) - [IocContainer.cs](file://GFramework.Core/ioc/IocContainer.cs#L211-L289) - [IocContainer.cs](file://GFramework.Core/ioc/IocContainer.cs#L357-L370) - [ArchitectureContext.cs](file://GFramework.Core/architecture/ArchitectureContext.cs#L26-L41) - [ArchitectureContext.cs](file://GFramework.Core/architecture/ArchitectureContext.cs#L82-L105) - [ArchitectureContext.cs](file://GFramework.Core/architecture/ArchitectureContext.cs#L115-L160) - [ArchitectureContext.cs](file://GFramework.Core/architecture/ArchitectureContext.cs#L169-L212) ### Godot 平台的热插拔与节点管理 - AbstractArchitecture - Init 中创建 ArchitectureAnchor 并绑定到 SceneTree,确保场景销毁时架构能正确清理。 - InstallGodotModule:安装模块节点、等待锚点就绪、延迟添加到场景树、调用 OnAttach 并记录模块。 - Destroy:遍历模块调用 OnDetach 并清空列表,再调用基类 Destroy。 ```mermaid sequenceDiagram participant Arch as "AbstractArchitecture" participant Anchor as "ArchitectureAnchor" participant Mod as "IGodotModule" participant Tree as "SceneTree" Arch->>Arch : "Init()" Arch->>Tree : "创建并添加 Anchor" Arch->>Arch : "InstallModules()" Arch->>Mod : "Install(this)" Arch->>Anchor : "WaitUntilReady()" Arch->>Tree : "CallDeferred(AddChild, Mod.Node)" Arch->>Mod : "OnAttach(this)" Arch->>Arch : "记录模块到列表" Arch->>Arch : "Destroy()" Arch->>Mod : "OnDetach()逐个" Arch->>Arch : "清空模块列表" Arch->>Arch : "调用基类 Destroy()" ``` **图表来源** - [AbstractArchitecture.cs](file://GFramework.Godot/architecture/AbstractArchitecture.cs#L56-L68) - [AbstractArchitecture.cs](file://GFramework.Godot/architecture/AbstractArchitecture.cs#L74-L91) - [AbstractArchitecture.cs](file://GFramework.Godot/architecture/AbstractArchitecture.cs#L100-L119) - [AbstractArchitecture.cs](file://GFramework.Godot/architecture/AbstractArchitecture.cs#L127-L139) **章节来源** - [AbstractArchitecture.cs](file://GFramework.Godot/architecture/AbstractArchitecture.cs#L56-L68) - [AbstractArchitecture.cs](file://GFramework.Godot/architecture/AbstractArchitecture.cs#L74-L91) - [AbstractArchitecture.cs](file://GFramework.Godot/architecture/AbstractArchitecture.cs#L100-L119) - [AbstractArchitecture.cs](file://GFramework.Godot/architecture/AbstractArchitecture.cs#L127-L139) ### 模块间通信与事件传递 - 事件总线 EventBus - Send/Send(T):发送事件。 - Register/UnRegister:注册/注销事件监听。 - ArchitectureContext 对事件的封装 - SendEvent/RegisterEvent/UnRegisterEvent,统一通过容器获取 IEventBus。 - 阶段感知与生命周期钩子 - IArchitecturePhaseAware:接收架构阶段变化。 - IArchitectureLifecycle:接收模块级阶段通知。 ```mermaid flowchart TD A["模块 A"] --> B["ArchitectureContext"] B --> C["EventBus"] C --> D["模块 B 监听器"] C --> E["模块 C 监听器"] F["架构阶段变化"] --> G["通知 IArchitecturePhaseAware"] G --> H["模块回调 OnArchitecturePhase"] ``` **图表来源** - [EventBus.cs](file://GFramework.Core/events/EventBus.cs#L16-L54) - [ArchitectureContext.cs](file://GFramework.Core/architecture/ArchitectureContext.cs#L169-L212) - [Architecture.cs](file://GFramework.Core/architecture/Architecture.cs#L189-L196) - [Architecture.cs](file://GFramework.Core/architecture/Architecture.cs#L202-L209) **章节来源** - [EventBus.cs](file://GFramework.Core/events/EventBus.cs#L16-L54) - [ArchitectureContext.cs](file://GFramework.Core/architecture/ArchitectureContext.cs#L169-L212) - [Architecture.cs](file://GFramework.Core/architecture/Architecture.cs#L189-L196) - [Architecture.cs](file://GFramework.Core/architecture/Architecture.cs#L202-L209) ### 创建自定义模块与注册依赖 - 创建自定义模块 - 游戏层:继承 AbstractModule,实现 Install 并按需覆盖 OnPhase/OnArchitecturePhase。 - Godot 层:实现 IGodotModule 或继承 AbstractGodotModule,提供 Node 并实现 OnAttach/OnDetach。 - 注册模块 - 在架构 Init 中调用 InstallModule 注册模块,或在 Godot 架构中使用 InstallGodotModule。 - 依赖注入与服务发现 - 通过 ArchitectureContext.GetService/GetSystem/GetModel/GetUtility 获取服务。 - 在模块 Install 中向容器注册自身或相关组件,实现模块内依赖注入。 **章节来源** - [AbstractModule.cs](file://GFramework.Game/architecture/AbstractModule.cs#L9-L33) - [IGodotModule.cs](file://GFramework.Godot/architecture/IGodotModule.cs#L10-L27) - [AbstractGodotModule.cs](file://GFramework.Godot/architecture/AbstractGodotModule.cs#L11-L55) - [Architecture.cs](file://GFramework.Core/architecture/Architecture.cs#L38-L48) - [AbstractArchitecture.cs](file://GFramework.Godot/architecture/AbstractArchitecture.cs#L100-L119) - [ArchitectureContext.cs](file://GFramework.Core/architecture/ArchitectureContext.cs#L26-L41) ## 依赖分析 - 模块与架构 - 模块通过 Install(IArchitecture) 与架构建立联系,架构通过 RegisterLifecycleHook/Container.RegisterPlurality 管理模块。 - 架构与容器 - ArchitectureContext 通过 IocContainer 缓存与获取服务,避免重复解析。 - 架构与事件 - 架构阶段变化通过 EventBus 发布 Ready/Destroying/Destroyed 等事件,模块可订阅。 - 阶段与转换 - ArchitectureConstants/ArchitecturePhase 定义线性阶段序列与允许转换,EnterPhase 校验转换合法性。 ```mermaid graph LR Mod["模块"] --> |Install| Arch["Architecture"] Arch --> |RegisterLifecycleHook| Hook["生命周期钩子"] Arch --> |RegisterPlurality| Ctnr["IocContainer"] Arch --> |Notify| Aware["IArchitecturePhaseAware"] Arch --> |Send Events| Bus["EventBus"] Const["ArchitectureConstants"] --> Phase["ArchitecturePhase"] Arch --> Const Arch --> Phase ``` **图表来源** - [Architecture.cs](file://GFramework.Core/architecture/Architecture.cs#L38-L48) - [Architecture.cs](file://GFramework.Core/architecture/Architecture.cs#L216-L223) - [Architecture.cs](file://GFramework.Core/architecture/Architecture.cs#L189-L196) - [Architecture.cs](file://GFramework.Core/architecture/Architecture.cs#L558-L566) - [ArchitectureConstants.cs](file://GFramework.Core/architecture/ArchitectureConstants.cs#L38-L54) - [ArchitecturePhase.cs](file://GFramework.Core.Abstractions/enums/ArchitecturePhase.cs#L10-L66) **章节来源** - [Architecture.cs](file://GFramework.Core/architecture/Architecture.cs#L38-L48) - [Architecture.cs](file://GFramework.Core/architecture/Architecture.cs#L216-L223) - [Architecture.cs](file://GFramework.Core/architecture/Architecture.cs#L189-L196) - [Architecture.cs](file://GFramework.Core/architecture/Architecture.cs#L558-L566) - [ArchitectureConstants.cs](file://GFramework.Core/architecture/ArchitectureConstants.cs#L38-L54) - [ArchitecturePhase.cs](file://GFramework.Core.Abstractions/enums/ArchitecturePhase.cs#L10-L66) ## 性能考虑 - 容器冻结与并发 - 在 Ready 阶段冻结容器,避免运行期注册带来的竞争与不确定性。 - IocContainer 使用 ReaderWriterLockSlim 保护读写,降低锁竞争。 - 初始化顺序与分组 - Architecture 按阶段分组初始化工具、模型、系统,减少跨阶段依赖导致的初始化开销。 - 事件与回调 - EventBus 基于类型事件系统,避免字符串键带来的性能损耗。 - Godot 热插拔 - InstallGodotModule 使用 CallDeferred 延迟添加节点,避免主线程阻塞。 **章节来源** - [IocContainer.cs](file://GFramework.Core/ioc/IocContainer.cs#L21-L21) - [IocContainer.cs](file://GFramework.Core/ioc/IocContainer.cs#L357-L370) - [Architecture.cs](file://GFramework.Core/architecture/Architecture.cs#L264-L330) - [AbstractArchitecture.cs](file://GFramework.Godot/architecture/AbstractArchitecture.cs#L100-L119) ## 故障排查指南 - 阶段转换异常 - 现象:非法阶段转换抛出异常。 - 排查:确认 ArchitectureConstants/ArchitecturePhase 的转换规则,避免跳过必要阶段。 - 注册时机错误 - 现象:在 Ready 之后注册组件抛出异常。 - 排查:在 Init 中完成所有注册,或调整配置允许后期注册。 - 容器冻结后注册 - 现象:冻结后注册抛出异常。 - 排查:确认冻结时机与注册顺序,避免在冻结后再次注册。 - 模块未正确卸载 - 现象:销毁阶段未触发或资源未释放。 - 排查:Godot 架构中确保 InstallGodotModule 安装的模块在 Destroy 中调用 OnDetach。 - 事件未收到 - 现象:模块未收到阶段或 Ready 事件。 - 排查:确认模块实现 IArchitecturePhaseAware/IArchitectureLifecycle,且在 Install 中正确注册。 **章节来源** - [Architecture.cs](file://GFramework.Core/architecture/Architecture.cs#L164-L183) - [Architecture.cs](file://GFramework.Core/architecture/Architecture.cs#L407-L414) - [IocContainer.cs](file://GFramework.Core/ioc/IocContainer.cs#L132-L137) - [AbstractArchitecture.cs](file://GFramework.Godot/architecture/AbstractArchitecture.cs#L127-L139) ## 结论 GFramework 的“插件系统”以模块为中心,通过统一的生命周期、依赖注入与事件系统实现高内聚、低耦合的扩展能力。结合 Godot 平台的节点生命周期,可实现真正的热插拔与模块化 UI/逻辑扩展。建议在实际项目中: - 将功能拆分为细粒度模块,明确 Install 与 OnAttach/OnDetach 的职责边界。 - 使用 ArchitectureContext 与 IocContainer 进行服务发现与依赖注入,避免硬编码耦合。 - 严格遵守阶段顺序与转换规则,确保初始化与销毁的确定性。 - 通过事件系统实现模块间通信,避免直接引用造成循环依赖。 ## 附录 - 快速开始(参考) - 定义架构:在 Init 中注册模型、系统与工具。 - 定义模块:继承 AbstractModule 或实现 IGodotModule,在 Install 中注册服务与监听。 - 启动架构:调用 Initialize/InitializeAsync,等待 Ready 事件。 - 测试架构示例 - TestArchitectureBase/SyncTestArchitecture/AsyncTestArchitecture 展示了阶段历史记录与 Ready 事件的使用方式。 **章节来源** - [README.md(GFramework.Core)](file://GFramework.Core/README.md#L125-L146) - [README.md(GFramework.Core)](file://GFramework.Core/README.md#L155-L188) - [README.md(GFramework.Core)](file://GFramework.Core/README.md#L196-L220) - [README.md(GFramework.Core)](file://GFramework.Core/README.md#L228-L260) - [TestArchitectureBase.cs](file://GFramework.Core.Tests/architecture/TestArchitectureBase.cs#L41-L57) - [AsyncTestArchitecture.cs](file://GFramework.Core.Tests/architecture/AsyncTestArchitecture.cs#L14-L21) - [SyncTestArchitecture.cs](file://GFramework.Core.Tests/architecture/SyncTestArchitecture.cs#L14-L19)