mirror of
https://github.com/GeWuYou/GFramework.git
synced 2026-03-22 19:03:29 +08:00
- 引入 IArchitectureContextProvider 接口解耦上下文获取逻辑 - 创建 GameContextProvider 作为默认上下文提供者 - 添加 ScopedContextProvider 支持多架构实例场景 - 修改源代码生成器使用上下文提供者模式 - 增加 SetContextProvider 方法支持测试和多架构场景 - 添加 RegistryInitializationHookBase 简化注册表初始化逻辑
55 lines
1.9 KiB
C#
55 lines
1.9 KiB
C#
using GFramework.Core.Abstractions.architecture;
|
|
using GFramework.Core.Abstractions.enums;
|
|
using GFramework.Core.Abstractions.utility;
|
|
|
|
namespace GFramework.Core.architecture;
|
|
|
|
/// <summary>
|
|
/// 注册表初始化钩子抽象基类,简化注册表配置的初始化逻辑
|
|
/// </summary>
|
|
/// <typeparam name="TRegistry">注册表类型</typeparam>
|
|
/// <typeparam name="TConfig">配置类型</typeparam>
|
|
public abstract class RegistryInitializationHookBase<TRegistry, TConfig> : IArchitectureLifecycleHook
|
|
where TRegistry : class, IUtility
|
|
{
|
|
private readonly IEnumerable<TConfig> _configs;
|
|
private readonly ArchitecturePhase _targetPhase;
|
|
|
|
/// <summary>
|
|
/// 初始化注册表初始化钩子
|
|
/// </summary>
|
|
/// <param name="configs">配置集合</param>
|
|
/// <param name="targetPhase">目标执行阶段,默认为 AfterSystemInit</param>
|
|
protected RegistryInitializationHookBase(
|
|
IEnumerable<TConfig> configs,
|
|
ArchitecturePhase targetPhase = ArchitecturePhase.AfterSystemInit)
|
|
{
|
|
_configs = configs;
|
|
_targetPhase = targetPhase;
|
|
}
|
|
|
|
/// <summary>
|
|
/// 当架构进入指定阶段时触发的回调方法
|
|
/// </summary>
|
|
/// <param name="phase">当前的架构阶段</param>
|
|
/// <param name="architecture">相关的架构实例</param>
|
|
public void OnPhase(ArchitecturePhase phase, IArchitecture architecture)
|
|
{
|
|
if (phase != _targetPhase) return;
|
|
|
|
var registry = architecture.Context.GetUtility<TRegistry>();
|
|
if (registry == null) return;
|
|
|
|
foreach (var config in _configs)
|
|
{
|
|
RegisterConfig(registry, config);
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// 注册单个配置项到注册表
|
|
/// </summary>
|
|
/// <param name="registry">注册表实例</param>
|
|
/// <param name="config">配置项</param>
|
|
protected abstract void RegisterConfig(TRegistry registry, TConfig config);
|
|
} |