mirror of
https://github.com/GeWuYou/GFramework.git
synced 2026-04-03 04:14:30 +08:00
- 实现了 ConfigRegistry 配置注册表,支持按名称注册和类型安全查询 - 创建了 InMemoryConfigTable 内存配置表,提供基于字典的只读配置存储 - 定义了 IConfigLoader、IConfigRegistry 和 IConfigTable 接口契约 - 添加了完整的单元测试验证配置表的注册、查询和类型检查功能 - 在项目文件中添加了新的代码文件夹结构 - 实现了配置表的覆盖策略以支持开发期热重载需求
65 lines
2.2 KiB
C#
65 lines
2.2 KiB
C#
using GFramework.Core.Abstractions.Utility;
|
|
|
|
namespace GFramework.Game.Abstractions.Config;
|
|
|
|
/// <summary>
|
|
/// 定义配置表的非泛型公共契约,用于在注册表中保存异构配置表实例。
|
|
/// 该接口只暴露运行时发现和诊断所需的元数据,不提供具体类型访问能力。
|
|
/// </summary>
|
|
public interface IConfigTable : IUtility
|
|
{
|
|
/// <summary>
|
|
/// 获取配置表主键类型。
|
|
/// </summary>
|
|
Type KeyType { get; }
|
|
|
|
/// <summary>
|
|
/// 获取配置项值类型。
|
|
/// </summary>
|
|
Type ValueType { get; }
|
|
|
|
/// <summary>
|
|
/// 获取当前配置表中的条目数量。
|
|
/// </summary>
|
|
int Count { get; }
|
|
}
|
|
|
|
/// <summary>
|
|
/// 定义强类型只读配置表契约。
|
|
/// 运行时配置表应通过主键执行只读查询,而不是暴露可变集合接口,
|
|
/// 以保持配置数据在加载完成后的稳定性和可预测性。
|
|
/// </summary>
|
|
/// <typeparam name="TKey">配置表主键类型。</typeparam>
|
|
/// <typeparam name="TValue">配置项值类型。</typeparam>
|
|
public interface IConfigTable<TKey, TValue> : IConfigTable
|
|
where TKey : notnull
|
|
{
|
|
/// <summary>
|
|
/// 获取指定主键的配置项。
|
|
/// </summary>
|
|
/// <param name="key">配置项主键。</param>
|
|
/// <returns>找到的配置项。</returns>
|
|
/// <exception cref="KeyNotFoundException">当主键不存在时抛出。</exception>
|
|
TValue Get(TKey key);
|
|
|
|
/// <summary>
|
|
/// 尝试获取指定主键的配置项。
|
|
/// </summary>
|
|
/// <param name="key">配置项主键。</param>
|
|
/// <param name="value">找到的配置项;未找到时返回默认值。</param>
|
|
/// <returns>找到配置项时返回 <c>true</c>,否则返回 <c>false</c>。</returns>
|
|
bool TryGet(TKey key, out TValue? value);
|
|
|
|
/// <summary>
|
|
/// 检查指定主键是否存在。
|
|
/// </summary>
|
|
/// <param name="key">配置项主键。</param>
|
|
/// <returns>主键存在时返回 <c>true</c>,否则返回 <c>false</c>。</returns>
|
|
bool ContainsKey(TKey key);
|
|
|
|
/// <summary>
|
|
/// 获取配置表中的所有配置项快照。
|
|
/// </summary>
|
|
/// <returns>只读配置项集合。</returns>
|
|
IReadOnlyCollection<TValue> All();
|
|
} |