GFramework/GFramework.Core/architecture/ArchitectureServices.cs
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

85 lines
3.1 KiB
C#

using GFramework.Core.Abstractions.architecture;
using GFramework.Core.Abstractions.command;
using GFramework.Core.Abstractions.events;
using GFramework.Core.Abstractions.ioc;
using GFramework.Core.Abstractions.query;
using GFramework.Core.ioc;
using GFramework.Core.services;
namespace GFramework.Core.architecture;
/// <summary>
/// 架构服务类,提供依赖注入容器、事件系统、命令总线和查询总线等核心服务。
/// 该类负责管理架构运行所需的核心组件,并提供统一的服务访问接口。
/// </summary>
public class ArchitectureServices : IArchitectureServices
{
private readonly IServiceModuleManager _moduleManager;
private IArchitectureContext _context = null!;
/// <summary>
/// 构造函数,初始化架构服务。
/// 初始化依赖注入容器,并创建事件总线、命令执行器、查询执行器和异步查询执行器的实例,
/// 然后将这些服务注册到容器中。
/// </summary>
public ArchitectureServices()
{
Container = new MicrosoftDiContainer();
_moduleManager = new ServiceModuleManager();
}
/// <summary>
/// 获取服务模块管理器实例。
/// 服务模块管理器用于管理架构中的服务模块,支持模块的动态加载和卸载。
/// </summary>
public IServiceModuleManager ModuleManager => _moduleManager;
/// <summary>
/// 获取依赖注入容器。
/// 该容器用于管理架构中所有服务的生命周期和依赖关系。
/// </summary>
public IIocContainer Container { get; }
/// <summary>
/// 获取事件总线实例。
/// 事件总线用于在架构中发布和订阅事件,实现组件间的松耦合通信。
/// </summary>
public IEventBus EventBus => Container.Get<IEventBus>()!;
/// <summary>
/// 获取命令执行器实例。
/// 命令执行器用于处理命令请求,执行业务逻辑。
/// </summary>
public ICommandExecutor CommandExecutor => Container.Get<ICommandExecutor>()!;
/// <summary>
/// 获取查询执行器实例。
/// 查询执行器用于处理同步查询请求,获取数据或状态信息。
/// </summary>
public IQueryExecutor QueryExecutor => Container.Get<IQueryExecutor>()!;
/// <summary>
/// 获取异步查询执行器实例。
/// 异步查询执行器用于处理异步查询请求,支持非阻塞的数据获取操作。
/// </summary>
public IAsyncQueryExecutor AsyncQueryExecutor => Container.Get<IAsyncQueryExecutor>()!;
/// <summary>
/// 设置架构上下文。
/// </summary>
/// <param name="context">要设置的架构上下文实例。</param>
public void SetContext(IArchitectureContext context)
{
_context = context;
Container.SetContext(context);
}
/// <summary>
/// 获取当前架构上下文。
/// </summary>
/// <returns>当前的架构上下文实例。</returns>
public IArchitectureContext GetContext()
{
return _context;
}
}