// 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;
}
}