using GFramework.Core.Abstractions.model;
using GFramework.Core.Abstractions.system;
using GFramework.Core.Abstractions.utility;
namespace GFramework.Core.Abstractions.architecture;
///
/// 架构接口,专注于生命周期管理,包括系统、模型、工具的注册和获取
/// 业务操作通过 ArchitectureRuntime 提供
///
public interface IArchitecture : IAsyncInitializable
{
///
/// 获取架构上下文
///
IArchitectureContext Context { get; }
///
/// 初始化方法,用于执行对象的初始化操作
///
///
/// 该方法通常用于设置初始状态、初始化成员变量或执行必要的预处理操作
///
void Initialize();
///
/// 销毁方法,用于执行对象的清理和销毁操作
///
///
/// 该方法通常用于释放资源、清理内存或执行必要的清理操作
///
void Destroy();
///
/// 注册系统实例到架构中
///
/// 系统类型,必须实现ISystem接口
/// 要注册的系统实例
/// 注册的系统实例
T RegisterSystem(T system) where T : ISystem;
///
/// 注册模型实例到架构中
///
/// 模型类型,必须实现IModel接口
/// 要注册的模型实例
/// 注册的模型实例
T RegisterModel(T model) where T : IModel;
///
/// 注册工具实例到架构中
///
/// 工具类型,必须实现IUtility接口
/// 要注册的工具实例
/// 注册的工具实例
T RegisterUtility(T utility) where T : IUtility;
///
/// 安装架构模块
///
/// 要安装的模块
/// 安装的模块实例
IArchitectureModule InstallModule(IArchitectureModule module);
///
/// 注册生命周期钩子
///
/// 生命周期钩子实例
/// 注册的钩子实例
IArchitectureLifecycle RegisterLifecycleHook(IArchitectureLifecycle hook);
///
/// 等待直到架构准备就绪的异步操作
///
/// 表示异步等待操作的任务
Task WaitUntilReadyAsync();
}