using GFramework.Core.Abstractions.Architectures;
using GFramework.Core.Abstractions.Enums;
using GFramework.Core.Abstractions.Environment;
using GFramework.Core.Abstractions.Ioc;
using GFramework.Core.Abstractions.Lifecycle;
using GFramework.Core.Abstractions.Logging;
using GFramework.Core.Abstractions.Model;
using GFramework.Core.Abstractions.Systems;
using GFramework.Core.Abstractions.Utility;
using GFramework.Core.Environment;
using GFramework.Core.Extensions;
using GFramework.Core.Logging;
using Microsoft.Extensions.DependencyInjection;
namespace GFramework.Core.Architectures;
///
/// 架构基类,提供系统、模型、工具等组件的注册与管理功能。
/// 专注于生命周期管理、初始化流程控制和架构阶段转换。
///
public abstract class Architecture(
IArchitectureConfiguration? configuration = null,
IEnvironment? environment = null,
IArchitectureServices? services = null,
IArchitectureContext? context = null
)
: IArchitecture
{
#region Module Management
///
/// 注册中介行为管道
/// 用于配置Mediator框架的行为拦截和处理逻辑
///
/// 行为类型,必须是引用类型
public void RegisterMediatorBehavior() where TBehavior : class
{
_logger.Debug($"Registering mediator behavior: {typeof(TBehavior).Name}");
Container.RegisterMediatorBehavior();
}
///
/// 安装架构模块
///
/// 要安装的模块
/// 安装的模块实例
public IArchitectureModule InstallModule(IArchitectureModule module)
{
var name = module.GetType().Name;
var logger = LoggerFactoryResolver.Provider.CreateLogger(name);
logger.Debug($"Installing module: {name}");
module.Install(this);
logger.Info($"Module installed: {name}");
return module;
}
#endregion
#region Properties
///
/// 获取架构配置对象
///
private IArchitectureConfiguration Configuration { get; } = configuration ?? new ArchitectureConfiguration();
///
/// 获取环境配置对象
///
private IEnvironment Environment { get; } = environment ?? new DefaultEnvironment();
private IArchitectureServices Services { get; } = services ?? new ArchitectureServices();
///
/// 获取依赖注入容器
///
private IIocContainer Container => Services.Container;
///
/// 当前架构的阶段
///
public ArchitecturePhase CurrentPhase { get; private set; }
///
/// 架构上下文
///
public IArchitectureContext Context => _context!;
#endregion
#region Fields
private readonly TaskCompletionSource _readyTcs = new(TaskCreationOptions.RunContinuationsAsynchronously);
///
/// 获取一个布尔值,指示当前架构是否处于就绪状态。
/// 当前架构的阶段等于 ArchitecturePhase.Ready 时返回 true,否则返回 false。
///
public bool IsReady => CurrentPhase == ArchitecturePhase.Ready;
///
/// 待初始化组件的去重集合。
/// 用于存储需要初始化的组件实例,确保每个组件仅被初始化一次。
///
private readonly HashSet _pendingInitializableSet = [];
///
/// 存储所有待初始化的组件(统一管理,保持注册顺序)
///
private readonly List _pendingInitializableList = [];
///
/// 可销毁组件的去重集合(支持 IDestroyable 和 IAsyncDestroyable)
///
private readonly HashSet