using System.Collections.Generic; using GFramework.Core.Abstractions.bases; using GFramework.Game.Abstractions.registry; namespace GFramework.Core.Abstractions.registries; /// /// 基于Dictionary的通用键值注册表基类 /// 提供基于字典的键值对注册、查询和管理功能 /// /// 键的类型 /// 值的类型 public abstract class KeyValueRegistryBase : IRegistry { /// /// 存储键值对映射关系的字典 /// protected readonly IDictionary Map; /// /// 初始化KeyValueRegistryBase的新实例 /// /// 用于比较键的相等性的比较器,如果为null则使用默认比较器 protected KeyValueRegistryBase(IEqualityComparer? comparer = null) { // 使用指定的比较器或默认比较器创建字典 Map = new Dictionary(comparer ?? EqualityComparer.Default); } /// /// 根据指定的键获取对应的值 /// /// 要查找的键 /// 与键关联的值 /// 当键不存在时抛出异常 public virtual TValue Get(TKey key) => Map.TryGetValue(key, out var value) ? value : throw new KeyNotFoundException($"{GetType().Name}: key not registered: {key}"); /// /// 判断是否包含指定的键 /// /// 要检查的键 /// 如果包含该键返回true,否则返回false public virtual bool Contains(TKey key) => Map.ContainsKey(key); /// /// 注册键值对到注册表中 /// /// 要注册的键 /// 要注册的值 /// 当前注册表实例,支持链式调用 public virtual IRegistry Registry(TKey key, TValue value) { Map.Add(key, value); return this; } /// /// 注册键值对映射对象到注册表中 /// /// 包含键值对的映射对象 /// 当前注册表实例,支持链式调用 public virtual IRegistry Registry(IKeyValue mapping) => Registry(mapping.Key, mapping.Value); }