using GFramework.Core.Abstractions.Lifecycle;
using GFramework.Core.Abstractions.Model;
using GFramework.Core.Abstractions.System;
using GFramework.Core.Abstractions.Utility;
using Microsoft.Extensions.DependencyInjection;
namespace GFramework.Core.Abstractions.Architecture;
///
/// 架构接口,专注于生命周期管理,包括系统、模型、工具的注册和获取
/// 业务操作通过 ArchitectureRuntime 提供
///
public interface IArchitecture : IAsyncInitializable, IAsyncDestroyable, IInitializable, IDestroyable
{
///
/// 获取架构上下文
///
IArchitectureContext Context { get; }
///
/// 获取或设置用于配置服务集合的委托
///
///
/// 一个可为空的委托,用于配置IServiceCollection实例
///
Action? Configurator { get; }
///
/// 注册系统实例到架构中
///
/// 系统类型,必须实现ISystem接口
/// 要注册的系统实例
/// 注册的系统实例
T RegisterSystem(T system) where T : ISystem;
///
/// 注册系统实例到架构中
///
/// 系统类型,必须实现ISystem接口
/// 系统实例创建后的回调函数,可为null
void RegisterSystem(Action? onCreated = null) where T : class, ISystem;
///
/// 注册模型实例到架构中
///
/// 模型类型,必须实现IModel接口
/// 要注册的模型实例
/// 注册的模型实例
T RegisterModel(T model) where T : IModel;
///
/// 注册模型实例到架构中
///
/// 模型类型,必须实现IModel接口
/// 模型实例创建后的回调函数,可为null
void RegisterModel(Action? onCreated = null) where T : class, IModel;
///
/// 注册工具实例到架构中
///
/// 工具类型,必须实现IUtility接口
/// 要注册的工具实例
/// 注册的工具实例
T RegisterUtility(T utility) where T : IUtility;
///
/// 注册工具类型并可选地指定创建回调
/// 当工具实例被创建时会调用指定的回调函数
///
/// 工具类型,必须是引用类型且实现IUtility接口
/// 工具实例创建后的回调函数,可为null
void RegisterUtility(Action? onCreated = null) where T : class, IUtility;
///
/// 注册中介行为管道
/// 用于配置Mediator框架的行为拦截和处理逻辑
///
/// 行为类型,必须是引用类型
void RegisterMediatorBehavior()
where TBehavior : class;
///
/// 安装架构模块
///
/// 要安装的模块
/// 安装的模块实例
IArchitectureModule InstallModule(IArchitectureModule module);
///
/// 注册生命周期钩子
///
/// 生命周期钩子实例
/// 注册的钩子实例
IArchitectureLifecycleHook RegisterLifecycleHook(IArchitectureLifecycleHook hook);
///
/// 等待直到架构准备就绪的异步操作
///
/// 表示异步等待操作的任务
Task WaitUntilReadyAsync();
}