refactor(architecture): 优化架构上下文的构造函数和服务获取逻辑

- 使用主构造函数简化 ArchitectureContext 的初始化
- 移除私有字段赋值的冗余代码
- 添加 GetOrCache 方法的详细注释说明
- 为关键业务逻辑添加中文注释
- 保持服务缓存和服务获取的核心功能不变
This commit is contained in:
GeWuYou 2026-02-02 21:59:31 +08:00
parent 75ad00dbcb
commit 3ad4913f9e

View File

@ -13,33 +13,43 @@ namespace GFramework.Core.architecture;
/// <summary> /// <summary>
/// 架构上下文类,提供对系统、模型、工具等组件的访问以及命令、查询、事件的执行管理 /// 架构上下文类,提供对系统、模型、工具等组件的访问以及命令、查询、事件的执行管理
/// </summary> /// </summary>
public class ArchitectureContext : IArchitectureContext public class ArchitectureContext(IIocContainer container) : IArchitectureContext
{ {
private readonly IIocContainer _container; private readonly IIocContainer _container = container ?? throw new ArgumentNullException(nameof(container));
private readonly Dictionary<Type, object> _serviceCache = new(); private readonly Dictionary<Type, object> _serviceCache = new();
public ArchitectureContext(IIocContainer container) /// <summary>
{ /// 获取指定类型的服务实例,如果缓存中存在则直接返回,否则从容器中获取并缓存
_container = container ?? throw new ArgumentNullException(nameof(container)); /// </summary>
} /// <typeparam name="TService">服务类型,必须为引用类型</typeparam>
/// <returns>服务实例如果未找到则返回null</returns>
public TService? GetService<TService>() where TService : class public TService? GetService<TService>() where TService : class
{ {
return GetOrCache<TService>(); return GetOrCache<TService>();
} }
/// <summary>
/// 从缓存中获取或创建指定类型的服务实例
/// 首先尝试从缓存中获取服务实例,如果缓存中不存在则从容器中获取并存入缓存
/// </summary>
/// <typeparam name="TService">服务类型,必须为引用类型</typeparam>
/// <returns>服务实例如果未找到则返回null</returns>
private TService? GetOrCache<TService>() where TService : class private TService? GetOrCache<TService>() where TService : class
{ {
// 尝试从服务缓存中获取已存在的服务实例
if (_serviceCache.TryGetValue(typeof(TService), out var cached)) if (_serviceCache.TryGetValue(typeof(TService), out var cached))
return (TService)cached; return (TService)cached;
// 从依赖注入容器中获取服务实例
var service = _container.Get<TService>(); var service = _container.Get<TService>();
// 如果服务实例存在,则将其存入缓存以供后续使用
if (service != null) if (service != null)
_serviceCache[typeof(TService)] = service; _serviceCache[typeof(TService)] = service;
return service; return service;
} }
#region Query Execution #region Query Execution
/// <summary> /// <summary>