SuperAPI AI 工具集

dependency-injection

通用与其它

查看项目

更新于 10-15 22:40

技能介绍

用途:面向 Godot 4.3+ 的依赖注入实践指南,解决系统间依赖管理问题,让节点保持松耦合、可替换、可测试。所有示例针对 Godot 4.3+,不使用已废弃 API。

主要能力:对比四种模式——Autoload 单例(复杂度低、可测试性低,适合音频、设置、平台服务等真正全局的服务)、@export 注入(复杂度低、可测试性高,适合大多数节点,在编辑器中连线,无需运行时查找)、服务定位器(复杂度中、可测试性中,适合插件、可选系统、运行时替换实现)、场景注入(复杂度低、可测试性高,适合父到子连线,如关卡设置敌人、HUD 设置子面板)。

使用方式:Autoload 在 Project Settings → Globals → Autoload 注册脚本;@export 将协作者节点暴露为 @export var,在 Inspector 或父场景中连线,其赋值发生在 _ready() 之前;服务定位器用中心注册表 autoload 以字符串键映射服务实例,服务在 _ready() 注册、_exit_tree() 注销,消费者调用 ServiceLocator.get(name);场景注入由父场景在 _ready() 中遍历树为子节点赋值。测试时可用假对象替换 autoload、替换 @export 或注册同名假服务。

适用场景与限制:按“是否每个场景都需要”“是否编辑期已知”“是否需运行时替换”“父场景是否同时拥有消费者与依赖”逐步选择。反模式包括把所有系统都做成 autoload、深层依赖链、循环依赖、把服务定位器当上帝对象、注入后忘记空检查。清单要求 @export 字段使用前校验、服务注销、无循环依赖、每个节点只依赖直接协作者。具体代码示例见资料中的 references 文件,此处不展开。