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)
{
return Map.TryGetValue(key, out var value)
? value
: throw new KeyNotFoundException($"{GetType().Name}: key not registered: {key}");
}
///
/// 判断是否包含指定的键
///
/// 要检查的键
/// 如果包含该键返回true,否则返回false
public virtual bool Contains(TKey key)
{
return Map.ContainsKey(key);
}
///
/// 注册键值对到注册表中
///
/// 要注册的键
/// 要注册的值
/// 当前注册表实例,支持链式调用
public virtual IRegistry Registry(TKey key, TValue value)
{
Map.Add(key, value);
return this;
}
///
/// 注册键值对映射对象到注册表中
///
/// 包含键值对的映射对象
/// 当前注册表实例,支持链式调用
public virtual IRegistry Registry(IKeyValue mapping)
{
return Registry(mapping.Key, mapping.Value);
}
}