From 7046c2cd47d2dedc3abfe4e7ffd476cc7d6b517e Mon Sep 17 00:00:00 2001 From: GeWuYou <95328647+GeWuYou@users.noreply.github.com> Date: Mon, 23 Feb 2026 13:47:30 +0800 Subject: [PATCH] =?UTF-8?q?feat(services):=20=E6=B7=BB=E5=8A=A0=E5=86=85?= =?UTF-8?q?=E7=BD=AE=E6=A8=A1=E5=9D=97=E9=87=8D=E5=A4=8D=E6=B3=A8=E5=86=8C?= =?UTF-8?q?=E6=A3=80=E6=9F=A5=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 在 ServiceModuleManager 中添加 _builtInModulesRegistered 标志位 - 实现重复注册检测逻辑,避免内置模块被多次注册 - 更新 RegisterBuiltInModules 方法的文档注释 - 在销毁所有模块时重置注册标志位 - 优化方法参数命名和描述信息 - 改进代码结构和注释内容 --- .../services/ServiceModuleManager.cs | 30 ++++++++++++------- 1 file changed, 20 insertions(+), 10 deletions(-) diff --git a/GFramework.Core/services/ServiceModuleManager.cs b/GFramework.Core/services/ServiceModuleManager.cs index 067047d..0d624f5 100644 --- a/GFramework.Core/services/ServiceModuleManager.cs +++ b/GFramework.Core/services/ServiceModuleManager.cs @@ -16,6 +16,7 @@ public sealed class ServiceModuleManager : IServiceModuleManager { private readonly ILogger _logger = LoggerFactoryResolver.Provider.CreateLogger(nameof(ServiceModuleManager)); private readonly List _modules = []; + private bool _builtInModulesRegistered; /// /// 注册单个服务模块。 @@ -41,13 +42,20 @@ public sealed class ServiceModuleManager : IServiceModuleManager } /// - /// 注册内置服务模块。 - /// 根据配置属性决定是否启用特定模块(如ECS模块),并对模块按优先级排序后注册到容器中。 + /// 注册内置服务模块,并根据优先级排序后完成服务注册。 + /// 内置模块包括事件总线、命令执行器、查询执行器等核心模块, + /// 并根据配置决定是否启用ECS模块。 /// - /// 依赖注入容器,用于注册模块提供的服务。 - /// 架构配置属性,用于控制模块的启用状态。 + /// IoC容器实例,用于模块服务注册。 + /// 架构属性配置,用于判断是否启用ECS模块。 public void RegisterBuiltInModules(IIocContainer container, ArchitectureProperties properties) { + if (_builtInModulesRegistered) + { + _logger.Warn("Built-in modules already registered, skipping duplicate registration"); + return; + } + RegisterModule(new EventBusModule()); RegisterModule(new CommandExecutorModule()); RegisterModule(new QueryExecutorModule()); @@ -69,11 +77,12 @@ public sealed class ServiceModuleManager : IServiceModuleManager module.Register(container); } + _builtInModulesRegistered = true; _logger.Info($"Registered {_modules.Count} built-in service modules"); } /// - /// 获取所有已注册的服务模块列表。 + /// 获取当前已注册的所有服务模块。 /// /// 只读的服务模块列表。 public IReadOnlyList GetModules() @@ -82,10 +91,10 @@ public sealed class ServiceModuleManager : IServiceModuleManager } /// - /// 异步初始化所有启用的服务模块。 - /// 支持同步和异步初始化模式,优先使用异步接口(如果模块实现了IAsyncInitializable)。 + /// 异步初始化所有已启用的服务模块。 + /// 根据模块是否实现异步初始化接口,选择同步或异步初始化方式。 /// - /// 是否启用异步初始化模式。 + /// 是否以异步模式初始化模块。 /// 表示异步操作的任务。 public async Task InitializeAllAsync(bool asyncMode) { @@ -109,8 +118,8 @@ public sealed class ServiceModuleManager : IServiceModuleManager } /// - /// 异步销毁所有启用的服务模块。 - /// 按逆序销毁模块以确保依赖关系正确释放,并捕获异常避免中断整个销毁流程。 + /// 异步销毁所有已启用的服务模块。 + /// 按照逆序销毁模块,确保依赖关系正确处理,并捕获销毁过程中的异常。 /// /// 表示异步操作的值任务。 public async ValueTask DestroyAllAsync() @@ -134,6 +143,7 @@ public sealed class ServiceModuleManager : IServiceModuleManager } _modules.Clear(); + _builtInModulesRegistered = false; _logger.Info("All service modules destroyed"); } } \ No newline at end of file