using GFramework.Core.Abstractions.Architectures;
using GFramework.Cqrs.Abstractions.Cqrs;
namespace GFramework.Core.Abstractions.Cqrs;
///
/// 定义架构上下文使用的 CQRS runtime seam。
/// 该抽象把请求分发、通知发布与流式处理从具体实现中解耦,
/// 使 不再直接依赖某个固定的 runtime 类型。
///
public interface ICqrsRuntime
{
///
/// 发送请求并返回响应。
///
/// 响应类型。
/// 当前架构上下文,用于上下文感知处理器注入与嵌套请求访问。
/// 要分发的请求。
/// 取消令牌。
/// 请求响应。
ValueTask SendAsync(
IArchitectureContext context,
IRequest request,
CancellationToken cancellationToken = default);
///
/// 发布通知到所有已注册处理器。
///
/// 通知类型。
/// 当前架构上下文,用于上下文感知处理器注入。
/// 要发布的通知。
/// 取消令牌。
/// 表示通知分发完成的值任务。
ValueTask PublishAsync(
IArchitectureContext context,
TNotification notification,
CancellationToken cancellationToken = default)
where TNotification : INotification;
///
/// 创建流式请求的异步响应序列。
///
/// 流元素类型。
/// 当前架构上下文,用于上下文感知处理器注入。
/// 流式请求。
/// 取消令牌。
/// 按需生成的异步响应序列。
IAsyncEnumerable CreateStream(
IArchitectureContext context,
IStreamRequest request,
CancellationToken cancellationToken = default);
}