// Copyright (c) 2025-2026 GeWuYou // SPDX-License-Identifier: Apache-2.0 using GFramework.Core.Abstractions.Ioc; using GFramework.Core.Abstractions.Logging; using GFramework.Cqrs.Abstractions.Cqrs; using GFramework.Cqrs.Internal; using GFramework.Cqrs.Notification; namespace GFramework.Cqrs; /// /// 提供 CQRS runtime 默认实现的跨程序集创建入口。 /// /// /// 需要在不暴露内部实现细节的前提下接入默认 CQRS runtime, /// 因此通过该工厂返回抽象接口,而不是直接公开内部 dispatcher / registrar 类型。 /// public static class CqrsRuntimeFactory { /// /// 创建默认 CQRS runtime 分发器。 /// /// 目标依赖注入容器。 /// 用于 runtime 诊断的日志器。 /// 默认 CQRS runtime。 /// /// 。 /// public static ICqrsRuntime CreateRuntime(IIocContainer container, ILogger logger) { return CreateRuntime(container, logger, notificationPublisher: null); } /// /// 创建默认 CQRS runtime 分发器,并允许调用方指定通知发布策略。 /// /// 目标依赖注入容器。 /// 用于 runtime 诊断的日志器。 /// 可选的通知发布策略;若为 则使用默认顺序发布器。 /// 默认 CQRS runtime。 /// /// 。 /// public static ICqrsRuntime CreateRuntime( IIocContainer container, ILogger logger, INotificationPublisher? notificationPublisher) { ArgumentNullException.ThrowIfNull(container); ArgumentNullException.ThrowIfNull(logger); return new CqrsDispatcher( container, logger, notificationPublisher ?? new SequentialNotificationPublisher()); } /// /// 创建默认 CQRS 处理器注册器。 /// /// 目标依赖注入容器。 /// 用于注册阶段诊断的日志器。 /// 默认 CQRS handler registrar。 /// /// 。 /// public static ICqrsHandlerRegistrar CreateHandlerRegistrar(IIocContainer container, ILogger logger) { ArgumentNullException.ThrowIfNull(container); ArgumentNullException.ThrowIfNull(logger); return new DefaultCqrsHandlerRegistrar(container, logger); } /// /// 创建默认的 CQRS 程序集注册协调器。 /// /// 底层 handler 注册器。 /// 用于注册阶段诊断的日志器。 /// 默认 CQRS 程序集注册协调器。 /// /// 。 /// public static ICqrsRegistrationService CreateRegistrationService(ICqrsHandlerRegistrar registrar, ILogger logger) { ArgumentNullException.ThrowIfNull(registrar); ArgumentNullException.ThrowIfNull(logger); return new DefaultCqrsRegistrationService(registrar, logger); } }