GeWuYou 058c27ce26 docs(core): 完善核心框架文档注释
- 为 AbstractContextUtility 类添加日志记录器文档注释
- 为 Architecture 类的 IsReady 属性和待初始化组件集合添加详细说明
- 修改 GitHub Actions workflow 使用 autobuild 模式替代手动构建
- 为 CoroutineScheduler 的 IsCoroutineAlive 方法添加完整文档注释
- 为 EnvironmentBase 类的 Initialize 方法和 Register 方法完善参数说明
- 为 IocContainer 的 OnContextReady 方法添加初始化日志记录器说明
- 为 WaitForEvent 协程指令类添加全面的 XML 文档注释和异常说明
2026-02-09 11:37:44 +08:00

87 lines
3.1 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

using GFramework.Core.Abstractions.environment;
using GFramework.Core.rule;
namespace GFramework.Core.environment;
/// <summary>
/// 环境基础抽象类实现了IEnvironment接口提供环境值的存储和获取功能
/// </summary>
public abstract class EnvironmentBase : ContextAwareBase, IEnvironment
{
/// <summary>
/// 存储环境值的字典,键为字符串,值为对象类型
/// </summary>
protected readonly Dictionary<string, object> Values = new();
/// <summary>
/// 获取环境名称的抽象属性
/// </summary>
public abstract string Name { get; }
/// <summary>
/// 根据键获取指定类型的值
/// </summary>
/// <typeparam name="T">要获取的值的类型,必须为引用类型</typeparam>
/// <param name="key">用于查找值的键</param>
/// <returns>如果找到则返回对应类型的值否则返回null</returns>
public virtual T? Get<T>(string key) where T : class
{
return TryGet<T>(key, out var value) ? value : null;
}
/// <summary>
/// 尝试根据键获取指定类型的值
/// </summary>
/// <typeparam name="T">要获取的值的类型,必须为引用类型</typeparam>
/// <param name="key">用于查找值的键</param>
/// <param name="value">输出参数如果成功则包含找到的值否则为null</param>
/// <returns>如果找到指定键且类型匹配则返回true否则返回false</returns>
public virtual bool TryGet<T>(string key, out T value) where T : class
{
if (Values.TryGetValue(key, out var obj) && obj is T typed)
{
value = typed;
return true;
}
value = null!;
return false;
}
/// <summary>
/// 根据键获取必需的指定类型值,如果找不到则抛出异常
/// </summary>
/// <typeparam name="T">要获取的值的类型,必须为引用类型</typeparam>
/// <param name="key">用于查找值的键</param>
/// <returns>找到的对应类型的值</returns>
/// <exception cref="InvalidOperationException">当指定键的值不存在时抛出</exception>
public virtual T GetRequired<T>(string key) where T : class
{
if (TryGet<T>(key, out var value))
return value;
throw new InvalidOperationException(
$"Environment [{Name}] missing required value: key='{key}', type='{typeof(T).Name}'");
}
void IEnvironment.Register(string key, object value)
{
Register(key, value);
}
/// <summary>
/// 抽象方法,用于初始化操作。具体实现由派生类提供。
/// </summary>
public abstract void Initialize();
/// <summary>
/// 注册键值对到环境值字典中
/// </summary>
/// <param name="key">要注册的键,作为字典中的唯一标识符</param>
/// <param name="value">要注册的值,与键关联的数据</param>
protected void Register(string key, object value)
{
// 将键值对添加到Values字典中
Values[key] = value;
}
}