using GFramework.Core.Abstractions.Command; using GFramework.Core.Abstractions.Environment; using GFramework.Core.Abstractions.Events; using GFramework.Core.Abstractions.Model; using GFramework.Core.Abstractions.Query; using GFramework.Core.Abstractions.System; using GFramework.Core.Abstractions.Utility; using Mediator; using ICommand = GFramework.Core.Abstractions.Command.ICommand; namespace GFramework.Core.Abstractions.Architecture; /// /// 架构上下文接口,提供对系统、模型、工具类的访问以及命令、查询、事件的发送和注册功能 /// public interface IArchitectureContext { /// /// 获取指定类型的服务实例 /// /// 服务类型 /// 服务实例,如果不存在则返回null TService? GetService() where TService : class; /// /// 获取指定类型的所有服务实例 /// /// 服务类型 /// 所有符合条件的服务实例列表 IReadOnlyList GetServices() where TService : class; /// /// 获取指定类型的系统实例 /// /// 系统类型,必须继承自ISystem接口 /// 系统实例,如果不存在则返回null TSystem? GetSystem() where TSystem : class, ISystem; /// /// 获取指定类型的所有系统实例 /// /// 系统类型,必须继承自ISystem接口 /// 所有符合条件的系统实例列表 IReadOnlyList GetSystems() where TSystem : class, ISystem; /// /// 获取指定类型的模型实例 /// /// 模型类型,必须继承自IModel接口 /// 模型实例,如果不存在则返回null TModel? GetModel() where TModel : class, IModel; /// /// 获取指定类型的所有模型实例 /// /// 模型类型,必须继承自IModel接口 /// 所有符合条件的模型实例列表 IReadOnlyList GetModels() where TModel : class, IModel; /// /// 获取指定类型的工具类实例 /// /// 工具类类型,必须继承自IUtility接口 /// 工具类实例,如果不存在则返回null TUtility? GetUtility() where TUtility : class, IUtility; /// /// 获取指定类型的所有工具类实例 /// /// 工具类类型,必须继承自IUtility接口 /// 所有符合条件的工具类实例列表 IReadOnlyList GetUtilities() where TUtility : class, IUtility; /// /// 获取指定类型的所有服务实例,并按优先级排序 /// 实现 IPrioritized 接口的服务将按优先级排序(数值越小优先级越高) /// /// 服务类型 /// 按优先级排序后的服务实例列表 IReadOnlyList GetServicesByPriority() where TService : class; /// /// 获取指定类型的所有系统实例,并按优先级排序 /// 实现 IPrioritized 接口的系统将按优先级排序(数值越小优先级越高) /// /// 系统类型,必须继承自ISystem接口 /// 按优先级排序后的系统实例列表 IReadOnlyList GetSystemsByPriority() where TSystem : class, ISystem; /// /// 获取指定类型的所有模型实例,并按优先级排序 /// 实现 IPrioritized 接口的模型将按优先级排序(数值越小优先级越高) /// /// 模型类型,必须继承自IModel接口 /// 按优先级排序后的模型实例列表 IReadOnlyList GetModelsByPriority() where TModel : class, IModel; /// /// 获取指定类型的所有工具类实例,并按优先级排序 /// 实现 IPrioritized 接口的工具将按优先级排序(数值越小优先级越高) /// /// 工具类类型,必须继承自IUtility接口 /// 按优先级排序后的工具类实例列表 IReadOnlyList GetUtilitiesByPriority() where TUtility : class, IUtility; /// /// 发送一个命令 /// /// 要发送的命令 void SendCommand(ICommand command); /// /// 发送一个带返回值的命令 /// /// 命令执行结果类型 /// 要发送的命令 /// 命令执行结果 TResult SendCommand(Command.ICommand command); /// /// [Mediator] 发送命令的同步版本(不推荐,仅用于兼容性) /// /// 命令响应类型 /// 要发送的命令对象 /// 命令执行结果 TResponse SendCommand(Mediator.ICommand command); /// /// 发送并异步执行一个命令 /// /// 要发送的命令 Task SendCommandAsync(IAsyncCommand command); /// /// [Mediator] 异步发送命令并返回结果 /// 通过Mediator模式发送命令请求,支持取消操作 /// /// 命令响应类型 /// 要发送的命令对象 /// 取消令牌,用于取消操作 /// 包含命令执行结果的ValueTask ValueTask SendCommandAsync(Mediator.ICommand command, CancellationToken cancellationToken = default); /// /// 发送并异步执行一个带返回值的命令 /// /// 命令执行结果类型 /// 要发送的命令 /// 命令执行结果 Task SendCommandAsync(IAsyncCommand command); /// /// 发送一个查询请求 /// /// 查询结果类型 /// 要发送的查询 /// 查询结果 TResult SendQuery(Query.IQuery query); /// /// [Mediator] 发送查询的同步版本(不推荐,仅用于兼容性) /// /// 查询响应类型 /// 要发送的查询对象 /// 查询结果 TResponse SendQuery(Mediator.IQuery query); /// /// 异步发送一个查询请求 /// /// 查询结果类型 /// 要发送的异步查询 /// 查询结果 Task SendQueryAsync(IAsyncQuery query); /// /// [Mediator] 异步发送查询并返回结果 /// 通过Mediator模式发送查询请求,支持取消操作 /// /// 查询响应类型 /// 要发送的查询对象 /// 取消令牌,用于取消操作 /// 包含查询结果的ValueTask ValueTask SendQueryAsync(Mediator.IQuery query, CancellationToken cancellationToken = default); /// /// 发送一个事件 /// /// 事件类型,必须具有无参构造函数 void SendEvent() where TEvent : new(); /// /// 发送一个带参数的事件 /// /// 事件类型 /// 事件参数 void SendEvent(TEvent e) where TEvent : class; /// /// 注册事件处理器 /// /// 事件类型 /// 事件处理委托 /// 事件注销接口 IUnRegister RegisterEvent(Action handler); /// /// 取消注册事件监听器 /// /// 事件类型 /// 要取消注册的事件回调方法 void UnRegisterEvent(Action onEvent); /// /// 发送请求(统一处理 Command/Query) /// ValueTask SendRequestAsync( IRequest request, CancellationToken cancellationToken = default); /// /// 发送请求(同步版本,不推荐) /// TResponse SendRequest(IRequest request); /// /// 发布通知(一对多事件) /// ValueTask PublishAsync( TNotification notification, CancellationToken cancellationToken = default) where TNotification : INotification; /// /// 创建流式请求(用于大数据集) /// IAsyncEnumerable CreateStream( IStreamRequest request, CancellationToken cancellationToken = default); // === 便捷扩展方法 === /// /// 发送命令(无返回值) /// ValueTask SendAsync( TCommand command, CancellationToken cancellationToken = default) where TCommand : IRequest; /// /// 发送命令(有返回值) /// ValueTask SendAsync( IRequest command, CancellationToken cancellationToken = default); /// /// 获取环境对象 /// /// 环境对象实例 IEnvironment GetEnvironment(); }