// Copyright (c) 2025-2026 GeWuYou // SPDX-License-Identifier: Apache-2.0 using GFramework.Cqrs.Abstractions.Cqrs; namespace GFramework.Cqrs.Tests.Cqrs; /// /// 为 hidden implementation stream invoker 回归提供“可见请求 + 隐藏实现类型”的测试替身容器。 /// internal static class HiddenImplementationStreamInvokerContainer { /// /// 用于验证 generated stream invoker metadata 在隐藏实现类型场景下仍可被 dispatcher 消费的流式请求。 /// /// 用于构造 generated stream 输出的起始值。 internal sealed record VisibleStreamRequest(int Start) : IStreamRequest; /// /// 供 registrar 通过可见 stream handler interface 注册、但自身保持隐藏的流式 handler 实现。 /// private sealed class HiddenHandler : IStreamRequestHandler { /// /// 返回 runtime 路径专用异步流,便于与 generated invoker 路径区分。 /// /// 当前测试流式请求。 /// 取消令牌。 /// runtime handler 生成的异步流结果。 public IAsyncEnumerable Handle(VisibleStreamRequest request, CancellationToken cancellationToken) { ArgumentNullException.ThrowIfNull(request); return StreamResultsAsync(request.Start, cancellationToken); } /// /// 生成用于区分 runtime 路径的固定异步流结果。 /// private static async IAsyncEnumerable StreamResultsAsync( int start, [EnumeratorCancellation] CancellationToken cancellationToken) { yield return start; await Task.Yield(); cancellationToken.ThrowIfCancellationRequested(); yield return start + 1; } } /// /// 返回当前隐藏 stream handler 实现类型,供 generated registry 以反射注册语义模拟 hidden implementation 场景。 /// internal static Type HiddenHandlerType => typeof(HiddenHandler); }