using GFramework.Core.Abstractions.Utility;
namespace GFramework.Game.Abstractions.Config;
///
/// 定义配置表的非泛型公共契约,用于在注册表中保存异构配置表实例。
/// 该接口只暴露运行时发现和诊断所需的元数据,不提供具体类型访问能力。
///
public interface IConfigTable : IUtility
{
///
/// 获取配置表主键类型。
///
Type KeyType { get; }
///
/// 获取配置项值类型。
///
Type ValueType { get; }
///
/// 获取当前配置表中的条目数量。
///
int Count { get; }
}
///
/// 定义强类型只读配置表契约。
/// 运行时配置表应通过主键执行只读查询,而不是暴露可变集合接口,
/// 以保持配置数据在加载完成后的稳定性和可预测性。
///
/// 配置表主键类型。
/// 配置项值类型。
public interface IConfigTable : IConfigTable
where TKey : notnull
{
///
/// 获取指定主键的配置项。
///
/// 配置项主键。
/// 找到的配置项。
/// 当主键不存在时抛出。
TValue Get(TKey key);
///
/// 尝试获取指定主键的配置项。
///
/// 配置项主键。
/// 找到的配置项;未找到时返回默认值。
/// 找到配置项时返回 true,否则返回 false。
bool TryGet(TKey key, out TValue? value);
///
/// 检查指定主键是否存在。
///
/// 配置项主键。
/// 主键存在时返回 true,否则返回 false。
bool ContainsKey(TKey key);
///
/// 获取配置表中的所有配置项快照。
///
/// 只读配置项集合。
IReadOnlyCollection All();
}