mirror of
https://github.com/GeWuYou/GFramework.git
synced 2026-03-22 10:34:30 +08:00
feat(architecture): 添加上下文工具初始化阶段支持
- 在架构中新增 _mContextUtilities 集合存储未初始化的上下文工具 - 实现工具注册时根据初始化状态决定是否立即初始化上下文工具 - 添加 BeforeUtilityInit 和 AfterUtilityInit 两个新的架构阶段 - 更新架构阶段转换配置以支持工具初始化流程 - 在同步和异步架构测试中验证新的初始化阶段序列 - 完善架构初始化流程日志记录和调试信息
This commit is contained in:
parent
0766416f83
commit
e000665c67
@ -14,6 +14,16 @@ public enum ArchitecturePhase
|
||||
/// </summary>
|
||||
None = 0,
|
||||
|
||||
/// <summary>
|
||||
/// 工具类初始化之前阶段
|
||||
/// </summary>
|
||||
BeforeUtilityInit,
|
||||
|
||||
/// <summary>
|
||||
/// 工具类初始化之后阶段
|
||||
/// </summary>
|
||||
AfterUtilityInit,
|
||||
|
||||
/// <summary>
|
||||
/// 模型初始化之前阶段
|
||||
/// </summary>
|
||||
|
||||
@ -60,6 +60,8 @@ public class AsyncArchitectureTests : ArchitectureTestsBase<AsyncTestArchitectur
|
||||
CollectionAssert.AreEqual(
|
||||
new[]
|
||||
{
|
||||
ArchitecturePhase.BeforeUtilityInit,
|
||||
ArchitecturePhase.AfterUtilityInit,
|
||||
ArchitecturePhase.BeforeModelInit,
|
||||
ArchitecturePhase.AfterModelInit,
|
||||
ArchitecturePhase.BeforeSystemInit,
|
||||
|
||||
@ -76,6 +76,8 @@ public class SyncArchitectureTests : ArchitectureTestsBase<SyncTestArchitecture>
|
||||
CollectionAssert.AreEqual(
|
||||
new[]
|
||||
{
|
||||
ArchitecturePhase.BeforeUtilityInit,
|
||||
ArchitecturePhase.AfterUtilityInit,
|
||||
ArchitecturePhase.BeforeModelInit,
|
||||
ArchitecturePhase.AfterModelInit,
|
||||
ArchitecturePhase.BeforeSystemInit,
|
||||
|
||||
@ -110,6 +110,12 @@ public abstract class Architecture(
|
||||
/// </summary>
|
||||
private readonly HashSet<ISystem> _allSystems = [];
|
||||
|
||||
/// <summary>
|
||||
/// 存储尚未初始化的上下文工具集合
|
||||
/// </summary>
|
||||
private readonly HashSet<IContextUtility> _mContextUtilities = [];
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 标记架构是否已初始化完成
|
||||
/// </summary>
|
||||
@ -328,6 +334,19 @@ public abstract class Architecture(
|
||||
_logger.Debug("Calling user Init()");
|
||||
Init();
|
||||
_logger.Debug("User Init() completed");
|
||||
// === Context Utility 初始化阶段 ===
|
||||
EnterPhase(ArchitecturePhase.BeforeUtilityInit);
|
||||
_logger.Info($"Initializing {_mContextUtilities.Count} context utilities");
|
||||
|
||||
foreach (var utility in _mContextUtilities)
|
||||
{
|
||||
_logger.Debug($"Initializing context utility: {utility.GetType().Name}");
|
||||
utility.Init();
|
||||
}
|
||||
|
||||
_mContextUtilities.Clear();
|
||||
EnterPhase(ArchitecturePhase.AfterUtilityInit);
|
||||
_logger.Info("All context utilities initialized");
|
||||
|
||||
// === 模型初始化阶段 ===
|
||||
// 在此阶段初始化所有注册的模型组件
|
||||
@ -447,7 +466,20 @@ public abstract class Architecture(
|
||||
public void RegisterUtility<TUtility>(TUtility utility) where TUtility : IUtility
|
||||
{
|
||||
_logger.Debug($"Registering utility: {typeof(TUtility).Name}");
|
||||
utility.IfType<IContextUtility>(contextUtility => { contextUtility.SetContext(Context); });
|
||||
utility.IfType<IContextUtility>(contextUtility =>
|
||||
{
|
||||
contextUtility.SetContext(Context);
|
||||
|
||||
if (!_mInitialized)
|
||||
{
|
||||
_mContextUtilities.Add(contextUtility);
|
||||
}
|
||||
else
|
||||
{
|
||||
_logger.Trace($"Immediately initializing context utility: {typeof(TUtility).Name}");
|
||||
contextUtility.Init();
|
||||
}
|
||||
});
|
||||
Container.RegisterPlurality(utility);
|
||||
_logger.Info($"Utility registered: {typeof(TUtility).Name}");
|
||||
}
|
||||
|
||||
@ -17,7 +17,15 @@ public static class ArchitectureConstants
|
||||
public static readonly ImmutableDictionary<ArchitecturePhase, ArchitecturePhase[]> PhaseTransitions =
|
||||
new Dictionary<ArchitecturePhase, ArchitecturePhase[]>
|
||||
{
|
||||
{ ArchitecturePhase.None, [ArchitecturePhase.BeforeModelInit] },
|
||||
{ ArchitecturePhase.None, [ArchitecturePhase.BeforeUtilityInit] },
|
||||
{
|
||||
ArchitecturePhase.BeforeUtilityInit,
|
||||
[ArchitecturePhase.AfterUtilityInit, ArchitecturePhase.FailedInitialization]
|
||||
},
|
||||
{
|
||||
ArchitecturePhase.AfterUtilityInit,
|
||||
[ArchitecturePhase.BeforeModelInit, ArchitecturePhase.FailedInitialization]
|
||||
},
|
||||
{
|
||||
ArchitecturePhase.BeforeModelInit, [
|
||||
ArchitecturePhase.AfterModelInit, ArchitecturePhase.FailedInitialization
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user