GeWuYou c593c5016b feat(architecture): 实现服务模块化管理和ECS功能
- 将架构服务重构为模块化设计,引入ServiceModuleManager统一管理
- 新增EventBusModule、CommandExecutorModule、QueryExecutorModule等核心服务模块
- 实现ECS模块支持,可配置启用Entity Component System功能
- 在架构初始化过程中集成模块注册、初始化和销毁流程
- 更新架构属性配置,添加EnableEcs开关控制ECS功能启用
- 优化服务获取方式,从直接依赖改为通过容器动态获取
- 移除架构上下文中的ECS相关实现代码,统一由ECS模块管理
2026-02-23 13:53:29 +08:00

110 lines
3.2 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

using GFramework.Core.Abstractions.architecture;
using GFramework.Core.Abstractions.ecs;
using GFramework.Core.Abstractions.ioc;
using GFramework.Core.Abstractions.lifecycle;
using GFramework.Core.ecs;
namespace GFramework.Core.services.modules;
/// <summary>
/// ECSEntity Component System模块用于注册、初始化和管理ECS相关服务。
/// 该模块负责创建ECS世界和系统运行器并将其注册到依赖注入容器中。
/// </summary>
public sealed class EcsModule : IServiceModule
{
private EcsSystemRunner? _ecsRunner;
private EcsWorld? _ecsWorld;
/// <summary>
/// 构造函数初始化ECS模块。
/// </summary>
/// <param name="enabled">指定模块是否启用,默认为 true。</param>
public EcsModule(bool enabled = true)
{
IsEnabled = enabled;
}
/// <summary>
/// 获取模块名称。
/// </summary>
public string ModuleName => nameof(EcsModule);
/// <summary>
/// 获取模块优先级,数值越小优先级越高。
/// </summary>
public int Priority => 100;
/// <summary>
/// 获取模块启用状态。
/// </summary>
public bool IsEnabled { get; }
/// <summary>
/// 注册ECS相关服务到依赖注入容器中。
/// 包括ECS世界实例和系统运行器实例的注册。
/// </summary>
/// <param name="container">依赖注入容器实例。</param>
public void Register(IIocContainer container)
{
if (!IsEnabled) return;
_ecsWorld = new EcsWorld();
container.Register(_ecsWorld);
container.Register<IEcsWorld>(_ecsWorld);
container.RegisterPlurality<EcsSystemRunner>();
_ecsRunner = container.Get<EcsSystemRunner>();
}
/// <summary>
/// 初始化ECS模块。
/// 如果系统运行器实现了IInitializable接口则调用其初始化方法。
/// </summary>
public void Initialize()
{
if (!IsEnabled || _ecsRunner == null) return;
if (_ecsRunner is IInitializable initializable)
{
initializable.Initialize();
}
}
/// <summary>
/// 异步销毁ECS模块并释放相关资源。
/// 包括销毁系统运行器和释放ECS世界资源。
/// </summary>
/// <returns>表示异步操作完成的任务。</returns>
public async ValueTask DestroyAsync()
{
if (!IsEnabled) return;
if (_ecsRunner is IDestroyable destroyable)
{
destroyable.Destroy();
}
_ecsRunner = null;
if (_ecsWorld != null)
{
_ecsWorld.Dispose();
_ecsWorld = null;
}
await ValueTask.CompletedTask;
}
/// <summary>
/// 获取ECS世界实例。
/// </summary>
/// <returns>ECS世界实例如果未启用则返回 null。</returns>
public IEcsWorld? GetEcsWorld() => _ecsWorld;
/// <summary>
/// 获取ECS系统运行器实例内部使用
/// </summary>
/// <returns>ECS系统运行器实例如果未启用则返回 null。</returns>
internal EcsSystemRunner? GetEcsRunner() => _ecsRunner;
}