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