mirror of
https://github.com/GeWuYou/GFramework.git
synced 2026-03-22 10:34:30 +08:00
refactor(architecture): 重构抽象架构类的初始化和锚点管理
- 添加架构配置、服务和上下文依赖注入支持 - 将静态架构锚点名称改为动态实例字段 - 实现基于类型名称和哈希码的唯一锚点命名机制 - 更新锚点创建和生命周期绑定逻辑 - 移除硬编码的常量名称,提高架构实例唯一性
This commit is contained in:
parent
2f5af5c067
commit
45ba75c0ad
@ -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;
|
||||
/// 抽象架构类,为特定类型的架构提供基础实现框架。
|
||||
/// 此类负责管理架构的初始化、生命周期绑定以及扩展模块的安装与销毁。
|
||||
/// </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>
|
||||
/// 存储所有已安装的Godot架构扩展组件列表
|
||||
/// 用于在架构销毁时正确清理所有扩展资源
|
||||
@ -29,6 +28,12 @@ public abstract class AbstractArchitecture : Architecture
|
||||
/// </summary>
|
||||
private ArchitectureAnchor? _anchor;
|
||||
|
||||
/// <summary>
|
||||
/// 架构锚点节点的唯一标识名称
|
||||
/// 用于在Godot场景树中创建和查找架构锚点节点
|
||||
/// </summary>
|
||||
private string _architectureAnchorName = null!;
|
||||
|
||||
/// <summary>
|
||||
/// 标记架构是否已被销毁的状态标志
|
||||
/// 用于防止架构被重复销毁,确保资源清理只执行一次
|
||||
@ -48,6 +53,8 @@ public abstract class AbstractArchitecture : Architecture
|
||||
/// </summary>
|
||||
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);
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user