using GFramework.Core.Abstractions.model; using GFramework.Core.Abstractions.rule; using GFramework.Core.Abstractions.system; using GFramework.Core.Abstractions.utility; namespace GFramework.Core.extensions; /// /// 提供对 IContextAware 接口的服务访问扩展方法 /// 包含单例和批量获取服务、系统、模型、工具的方法 /// public static class ContextAwareServiceExtensions { #region 单例获取 /// /// 从上下文感知对象中获取指定类型的服务 /// /// 要获取的服务类型 /// 实现 IContextAware 接口的上下文感知对象 /// 指定类型的服务实例,如果未找到则返回 null /// 当 contextAware 参数为 null 时抛出 public static TService? GetService(this IContextAware contextAware) where TService : class { ArgumentNullException.ThrowIfNull(contextAware); var context = contextAware.GetContext(); return context.GetService(); } /// /// 获取架构上下文中的指定系统 /// /// 目标系统类型 /// 实现 IContextAware 接口的对象 /// 指定类型的系统实例 /// 当 contextAware 为 null 时抛出 public static TSystem? GetSystem(this IContextAware contextAware) where TSystem : class, ISystem { ArgumentNullException.ThrowIfNull(contextAware); var context = contextAware.GetContext(); return context.GetSystem(); } /// /// 获取架构上下文中的指定模型 /// /// 目标模型类型 /// 实现 IContextAware 接口的对象 /// 指定类型的模型实例 /// 当 contextAware 为 null 时抛出 public static TModel? GetModel(this IContextAware contextAware) where TModel : class, IModel { ArgumentNullException.ThrowIfNull(contextAware); var context = contextAware.GetContext(); return context.GetModel(); } /// /// 获取架构上下文中的指定工具 /// /// 目标工具类型 /// 实现 IContextAware 接口的对象 /// 指定类型的工具实例 /// 当 contextAware 为 null 时抛出 public static TUtility? GetUtility(this IContextAware contextAware) where TUtility : class, IUtility { ArgumentNullException.ThrowIfNull(contextAware); var context = contextAware.GetContext(); return context.GetUtility(); } #endregion #region 批量获取 /// /// 从上下文感知对象中获取指定类型的所有服务 /// /// 要获取的服务类型 /// 实现 IContextAware 接口的上下文感知对象 /// 所有符合条件的服务实例列表 /// 当 contextAware 参数为 null 时抛出 public static IReadOnlyList GetServices(this IContextAware contextAware) where TService : class { ArgumentNullException.ThrowIfNull(contextAware); var context = contextAware.GetContext(); return context.GetServices(); } /// /// 获取架构上下文中的所有指定系统 /// /// 目标系统类型 /// 实现 IContextAware 接口的对象 /// 所有符合条件的系统实例列表 /// 当 contextAware 为 null 时抛出 public static IReadOnlyList GetSystems(this IContextAware contextAware) where TSystem : class, ISystem { ArgumentNullException.ThrowIfNull(contextAware); var context = contextAware.GetContext(); return context.GetSystems(); } /// /// 获取架构上下文中的所有指定模型 /// /// 目标模型类型 /// 实现 IContextAware 接口的对象 /// 所有符合条件的模型实例列表 /// 当 contextAware 为 null 时抛出 public static IReadOnlyList GetModels(this IContextAware contextAware) where TModel : class, IModel { ArgumentNullException.ThrowIfNull(contextAware); var context = contextAware.GetContext(); return context.GetModels(); } /// /// 获取架构上下文中的所有指定工具 /// /// 目标工具类型 /// 实现 IContextAware 接口的对象 /// 所有符合条件的工具实例列表 /// 当 contextAware 为 null 时抛出 public static IReadOnlyList GetUtilities(this IContextAware contextAware) where TUtility : class, IUtility { ArgumentNullException.ThrowIfNull(contextAware); var context = contextAware.GetContext(); return context.GetUtilities(); } #endregion }