using System.Reflection; using GFramework.Core.Abstractions.Lifecycle; using GFramework.Core.Abstractions.Model; using GFramework.Core.Abstractions.Systems; using GFramework.Core.Abstractions.Utility; namespace GFramework.Core.Abstractions.Architectures; /// /// 架构接口,专注于生命周期管理,包括系统、模型、工具的注册和获取 /// 业务操作通过 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; /// /// 注册 CQRS 请求管道行为。 /// 既支持实现 IPipelineBehavior<,> 的开放泛型行为类型, /// 也支持绑定到单一请求/响应对的封闭行为类型。 /// /// 行为类型,必须是引用类型 void RegisterCqrsPipelineBehavior() where TBehavior : class; /// /// 从指定程序集显式注册 CQRS 处理器。 /// 当处理器位于默认架构程序集之外的模块或扩展程序集中时,可在初始化阶段调用该入口接入对应程序集。 /// /// 包含 CQRS 处理器或生成注册器的程序集。 /// /// 当前架构的底层容器已冻结,无法继续注册处理器。 void RegisterCqrsHandlersFromAssembly(Assembly assembly); /// /// 从多个程序集显式注册 CQRS 处理器。 /// 该入口会对程序集集合去重,适用于统一接入多个扩展包或模块程序集。 /// /// 要接入的程序集集合。 /// /// 当前架构的底层容器已冻结,无法继续注册处理器。 void RegisterCqrsHandlersFromAssemblies(IEnumerable assemblies); /// /// 安装架构模块 /// /// 要安装的模块 /// 安装的模块实例 IArchitectureModule InstallModule(IArchitectureModule module); /// /// 注册生命周期钩子 /// /// 生命周期钩子实例 /// 注册的钩子实例 IArchitectureLifecycleHook RegisterLifecycleHook(IArchitectureLifecycleHook hook); /// /// 等待直到架构准备就绪的异步操作 /// /// 表示异步等待操作的任务 Task WaitUntilReadyAsync(); }