using GFramework.Core.Abstractions.architecture;
using GFramework.Core.Abstractions.enums;
using GFramework.Core.Abstractions.utility;
namespace GFramework.Core.architecture;
///
/// 注册表初始化钩子抽象基类,简化注册表配置的初始化逻辑
///
/// 注册表类型
/// 配置类型
public abstract class RegistryInitializationHookBase : IArchitectureLifecycleHook
where TRegistry : class, IUtility
{
private readonly IEnumerable _configs;
private readonly ArchitecturePhase _targetPhase;
///
/// 初始化注册表初始化钩子
///
/// 配置集合
/// 目标执行阶段,默认为 AfterSystemInit
protected RegistryInitializationHookBase(
IEnumerable configs,
ArchitecturePhase targetPhase = ArchitecturePhase.AfterSystemInit)
{
_configs = configs;
_targetPhase = targetPhase;
}
///
/// 当架构进入指定阶段时触发的回调方法
///
/// 当前的架构阶段
/// 相关的架构实例
public void OnPhase(ArchitecturePhase phase, IArchitecture architecture)
{
if (phase != _targetPhase) return;
var registry = architecture.Context.GetUtility();
if (registry == null) return;
foreach (var config in _configs)
{
RegisterConfig(registry, config);
}
}
///
/// 注册单个配置项到注册表
///
/// 注册表实例
/// 配置项
protected abstract void RegisterConfig(TRegistry registry, TConfig config);
}