refactor(architecture): 重构抽象架构类的初始化和锚点管理

- 添加架构配置、服务和上下文依赖注入支持
- 将静态架构锚点名称改为动态实例字段
- 实现基于类型名称和哈希码的唯一锚点命名机制
- 更新锚点创建和生命周期绑定逻辑
- 移除硬编码的常量名称,提高架构实例唯一性
This commit is contained in:
GwWuYou 2026-01-01 22:58:56 +08:00
parent 2f5af5c067
commit 45ba75c0ad

View File

@ -1,4 +1,5 @@
using GFramework.Core.architecture; using GFramework.Core.Abstractions.architecture;
using GFramework.Core.architecture;
using GFramework.Core.constants; using GFramework.Core.constants;
using GFramework.Godot.extensions; using GFramework.Godot.extensions;
using Godot; using Godot;
@ -9,14 +10,12 @@ namespace GFramework.Godot.architecture;
/// 抽象架构类,为特定类型的架构提供基础实现框架。 /// 抽象架构类,为特定类型的架构提供基础实现框架。
/// 此类负责管理架构的初始化、生命周期绑定以及扩展模块的安装与销毁。 /// 此类负责管理架构的初始化、生命周期绑定以及扩展模块的安装与销毁。
/// </summary> /// </summary>
public abstract class AbstractArchitecture : Architecture public abstract class AbstractArchitecture(
IArchitectureConfiguration? configuration = null,
IArchitectureServices? services = null,
IArchitectureContext? context = null
) : Architecture(configuration, services, context)
{ {
/// <summary>
/// 架构锚点节点的唯一标识名称
/// 用于在Godot场景树中创建和查找架构锚点节点
/// </summary>
private const string ArchitectureAnchorName = $"__{GFrameworkConstants.FrameworkName}__ArchitectureAnchor__";
/// <summary> /// <summary>
/// 存储所有已安装的Godot架构扩展组件列表 /// 存储所有已安装的Godot架构扩展组件列表
/// 用于在架构销毁时正确清理所有扩展资源 /// 用于在架构销毁时正确清理所有扩展资源
@ -29,6 +28,12 @@ public abstract class AbstractArchitecture : Architecture
/// </summary> /// </summary>
private ArchitectureAnchor? _anchor; private ArchitectureAnchor? _anchor;
/// <summary>
/// 架构锚点节点的唯一标识名称
/// 用于在Godot场景树中创建和查找架构锚点节点
/// </summary>
private string _architectureAnchorName = null!;
/// <summary> /// <summary>
/// 标记架构是否已被销毁的状态标志 /// 标记架构是否已被销毁的状态标志
/// 用于防止架构被重复销毁,确保资源清理只执行一次 /// 用于防止架构被重复销毁,确保资源清理只执行一次
@ -48,6 +53,8 @@ public abstract class AbstractArchitecture : Architecture
/// </summary> /// </summary>
protected override void Init() protected override void Init()
{ {
_architectureAnchorName =
$"__{GFrameworkConstants.FrameworkName}__{GetType().Name}__{GetHashCode()}__ArchitectureAnchor__";
AttachToGodotLifecycle(); AttachToGodotLifecycle();
InstallModules(); InstallModules();
} }
@ -68,12 +75,12 @@ public abstract class AbstractArchitecture : Architecture
return; return;
// 防止重复挂载(热重载 / 多次 Init // 防止重复挂载(热重载 / 多次 Init
if (tree.Root.GetNodeOrNull(ArchitectureAnchorName) != null) if (tree.Root.GetNodeOrNull(_architectureAnchorName) != null)
return; return;
_anchor = new ArchitectureAnchor _anchor = new ArchitectureAnchor
{ {
Name = ArchitectureAnchorName Name = _architectureAnchorName
}; };
_anchor.Bind(Destroy); _anchor.Bind(Destroy);