mirror of
https://github.com/GeWuYou/GFramework.git
synced 2026-05-07 00:39:00 +08:00
- 实现 MicrosoftDiContainer 类,提供对 Microsoft.Extensions.DependencyInjection 的适配 - 添加线程安全的依赖注入容器功能,支持单例、瞬态和作用域服务注册 - 实现 CqrsRuntimeModule 模块,用于注册 CQRS 运行时组件 - 添加 CqrsRuntimeFactory 工厂类,提供 CQRS 运行时实现的创建入口 - 实现 DefaultCqrsRegistrationService,处理 CQRS 处理器的程序集注册 - 添加 CqrsTestRuntime 测试工具类,为测试环境提供 CQRS 运行时访问 - 支持多种注册方式包括实例注册、类型映射和工厂方法 - 实现服务获取、查询和生命周期管理功能 - 添加容器冻结机制以构建服务提供者 - 支持 CQRS 管道行为和处理器的批量注册功能
69 lines
2.5 KiB
C#
69 lines
2.5 KiB
C#
using GFramework.Core.Abstractions.Architectures;
|
|
using GFramework.Core.Abstractions.Ioc;
|
|
using GFramework.Core.Abstractions.Logging;
|
|
using GFramework.Cqrs;
|
|
using GFramework.Cqrs.Abstractions.Cqrs;
|
|
using LegacyICqrsRuntime = GFramework.Core.Abstractions.Cqrs.ICqrsRuntime;
|
|
|
|
namespace GFramework.Core.Services.Modules;
|
|
|
|
/// <summary>
|
|
/// CQRS runtime 模块,用于把默认请求分发器与处理器注册器接入架构容器。
|
|
/// 该模块在架构初始化早期完成注册,保证用户初始化阶段即可使用 CQRS 入口与 handler 自动接入能力。
|
|
/// </summary>
|
|
public sealed class CqrsRuntimeModule : IServiceModule
|
|
{
|
|
/// <summary>
|
|
/// 获取模块名称。
|
|
/// </summary>
|
|
public string ModuleName => nameof(CqrsRuntimeModule);
|
|
|
|
/// <summary>
|
|
/// 获取模块优先级。
|
|
/// CQRS runtime 需要先于架构默认 handler 扫描路径可用,因此放在基础总线模块之后、用户初始化之前注册。
|
|
/// </summary>
|
|
public int Priority => 15;
|
|
|
|
/// <summary>
|
|
/// 获取模块启用状态,默认启用。
|
|
/// </summary>
|
|
public bool IsEnabled => true;
|
|
|
|
/// <summary>
|
|
/// 注册默认 CQRS runtime seam 实现。
|
|
/// </summary>
|
|
/// <param name="container">目标依赖注入容器。</param>
|
|
public void Register(IIocContainer container)
|
|
{
|
|
ArgumentNullException.ThrowIfNull(container);
|
|
|
|
var dispatcherLogger = LoggerFactoryResolver.Provider.CreateLogger("CqrsDispatcher");
|
|
var registrarLogger = LoggerFactoryResolver.Provider.CreateLogger("DefaultCqrsHandlerRegistrar");
|
|
var registrationLogger = LoggerFactoryResolver.Provider.CreateLogger("DefaultCqrsRegistrationService");
|
|
var runtime = CqrsRuntimeFactory.CreateRuntime(container, dispatcherLogger);
|
|
var registrar = CqrsRuntimeFactory.CreateHandlerRegistrar(container, registrarLogger);
|
|
|
|
container.Register(runtime);
|
|
container.Register<LegacyICqrsRuntime>((LegacyICqrsRuntime)runtime);
|
|
container.Register<ICqrsHandlerRegistrar>(registrar);
|
|
container.Register<ICqrsRegistrationService>(
|
|
CqrsRuntimeFactory.CreateRegistrationService(registrar, registrationLogger));
|
|
}
|
|
|
|
/// <summary>
|
|
/// 初始化模块。
|
|
/// </summary>
|
|
public void Initialize()
|
|
{
|
|
}
|
|
|
|
/// <summary>
|
|
/// 异步销毁模块。
|
|
/// </summary>
|
|
/// <returns>已完成的值任务。</returns>
|
|
public ValueTask DestroyAsync()
|
|
{
|
|
return ValueTask.CompletedTask;
|
|
}
|
|
}
|