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