using GFramework.Core.Abstractions.Bases;
namespace GFramework.Core.Abstractions.Registries;
///
/// 表示一个通用的注册表接口,用于根据键类型T获取值类型TR的对象
///
/// 注册表中用作键的类型
/// 注册表中存储的值的类型
public interface IRegistry
{
///
/// 获取注册表中所有的键
///
IEnumerable Keys { get; }
///
/// 获取注册表中项的数量
///
int Count { get; }
///
/// 根据指定的键获取对应的值
///
/// 用于查找值的键
/// 与指定键关联的值
Tr Get(T key);
///
/// 检查注册表是否包含指定的键
///
/// 要检查的键
/// 如果注册表包含具有指定键的元素,则为true;否则为false
bool Contains(T key);
///
/// 添加一个键值对到注册表中
///
/// 要添加的键值对映射对象
IRegistry Registry(IKeyValue mapping);
///
/// 添加一个键值对到注册表中
///
/// 要添加的键
/// 要添加的值
IRegistry Registry(T key, Tr value);
///
/// 从注册表中移除指定键的项
///
/// 要移除的键
/// 如果成功移除则返回true,否则返回false
bool Unregister(T key);
///
/// 获取注册表中所有的键值对
///
/// 包含所有注册键值对的只读字典
IReadOnlyDictionary GetAll();
///
/// 获取注册表中所有的值
///
/// 包含所有注册值的只读集合
IReadOnlyCollection Values();
}