using GFramework.Core.Abstractions.environment; using GFramework.Core.rule; namespace GFramework.Core.environment; /// /// 环境基础抽象类,实现了IEnvironment接口,提供环境值的存储和获取功能 /// public abstract class EnvironmentBase : ContextAwareBase, IEnvironment { /// /// 存储环境值的字典,键为字符串,值为对象类型 /// protected readonly Dictionary Values = new(); /// /// 获取环境名称的抽象属性 /// public abstract string Name { get; } /// /// 根据键获取指定类型的值 /// /// 要获取的值的类型,必须为引用类型 /// 用于查找值的键 /// 如果找到则返回对应类型的值,否则返回null public virtual T? Get(string key) where T : class { return TryGet(key, out var value) ? value : null; } /// /// 尝试根据键获取指定类型的值 /// /// 要获取的值的类型,必须为引用类型 /// 用于查找值的键 /// 输出参数,如果成功则包含找到的值,否则为null /// 如果找到指定键且类型匹配则返回true,否则返回false public virtual bool TryGet(string key, out T value) where T : class { if (Values.TryGetValue(key, out var obj) && obj is T typed) { value = typed; return true; } value = null!; return false; } /// /// 根据键获取必需的指定类型值,如果找不到则抛出异常 /// /// 要获取的值的类型,必须为引用类型 /// 用于查找值的键 /// 找到的对应类型的值 /// 当指定键的值不存在时抛出 public virtual T GetRequired(string key) where T : class { if (TryGet(key, out var value)) return value; throw new InvalidOperationException( $"Environment [{Name}] missing required value: key='{key}', type='{typeof(T).Name}'"); } void IEnvironment.Register(string key, object value) { Register(key, value); } /// /// 抽象方法,用于初始化操作。具体实现由派生类提供。 /// public abstract void Initialize(); /// /// 注册键值对到环境值字典中 /// /// 要注册的键,作为字典中的唯一标识符 /// 要注册的值,与键关联的数据 protected void Register(string key, object value) { // 将键值对添加到Values字典中 Values[key] = value; } }