// Copyright (c) 2025-2026 GeWuYou // SPDX-License-Identifier: Apache-2.0 namespace GFramework.Cqrs.Abstractions.Cqrs; /// /// 定义架构上下文使用的 CQRS runtime seam。 /// 该抽象把请求分发、通知发布与流式处理从具体实现中解耦, /// 使 CQRS runtime 契约可独立归属到 GFramework.Cqrs.Abstractions。 /// public interface ICqrsRuntime { /// /// 发送请求并返回响应。 /// /// 响应类型。 /// 当前 CQRS 分发上下文。 /// 要分发的请求。 /// 取消令牌。 /// 请求响应。 /// /// 。 /// /// /// 当前上下文无法满足运行时要求,例如未找到对应请求处理器,或请求处理链中的 /// IContextAware 对象需要 IArchitectureContext 但当前 不提供该能力。 /// /// /// 该契约允许调用方传入任意 , /// 但默认运行时在需要向处理器或行为注入框架上下文时,仍要求该上下文同时实现 IArchitectureContext。 /// ValueTask SendAsync( ICqrsContext context, IRequest request, CancellationToken cancellationToken = default); /// /// 发布通知到所有已注册处理器。 /// /// 通知类型。 /// 当前 CQRS 分发上下文。 /// 要发布的通知。 /// 取消令牌。 /// 表示通知分发完成的值任务。 /// /// 。 /// /// /// 已解析到的通知处理器需要框架级上下文注入,但当前 不提供 /// IArchitectureContext 能力。 /// /// /// 默认实现允许零处理器场景静默完成;只有在处理器注入前置条件不满足时才会抛出异常。 /// ValueTask PublishAsync( ICqrsContext context, TNotification notification, CancellationToken cancellationToken = default) where TNotification : INotification; /// /// 创建流式请求的异步响应序列。 /// /// 流元素类型。 /// 当前 CQRS 分发上下文。 /// 流式请求。 /// 取消令牌。 /// 按需生成的异步响应序列。 /// /// 。 /// /// /// 当前上下文无法满足运行时要求,例如未找到对应流式处理器,或流式处理链中的 /// IContextAware 对象需要 IArchitectureContext 但当前 不提供该能力。 /// /// /// 返回的异步序列在枚举前通常已完成处理器解析与上下文注入, /// 因此调用方应把 视为整个枚举生命周期内的必需依赖。 /// IAsyncEnumerable CreateStream( ICqrsContext context, IStreamRequest request, CancellationToken cancellationToken = default); }