// Copyright (c) 2025-2026 GeWuYou // SPDX-License-Identifier: Apache-2.0 using GFramework.Core.Abstractions.Logging; using GFramework.Cqrs; using GFramework.Cqrs.Abstractions.Cqrs; namespace GFramework.Core.Tests.Architectures; /// /// 模拟由 source-generator 为扩展程序集生成的 CQRS handler registry。 /// internal sealed class AdditionalAssemblyNotificationHandlerRegistry : ICqrsHandlerRegistry { /// /// 将扩展程序集中的通知处理器映射写入服务集合。 /// /// 目标服务集合。 /// 日志记录器。 /// /// 当 时抛出。 /// public void Register(IServiceCollection services, ILogger logger) { ArgumentNullException.ThrowIfNull(services); ArgumentNullException.ThrowIfNull(logger); services.AddTransient>(_ => CreateHandler()); logger.Debug( $"Registered CQRS handler proxy for {typeof(INotificationHandler).FullName}."); } /// /// 创建一个仅供显式程序集注册路径使用的动态通知处理器。 /// /// 用于记录通知触发次数的测试替身处理器。 private static INotificationHandler CreateHandler() { var handler = new Mock>(); handler .Setup(target => target.Handle(It.IsAny(), It.IsAny())) .Returns(() => { AdditionalAssemblyNotificationHandlerState.RecordInvocation(); return ValueTask.CompletedTask; }); return handler.Object; } }