using GFramework.Core.Abstractions.Architectures;
using GFramework.Core.Abstractions.Rule;
using GFramework.Core.Architectures;
namespace GFramework.Core.Rule;
///
/// 上下文感知基类,实现了 ,为需要感知架构上下文的类提供基础实现。
///
///
/// 该基类面向手动继承场景,使用简单的实例字段缓存上下文,不提供额外同步保护。
/// 与 ContextAwareGenerator 生成的实现不同,它不会维护静态共享的
/// ,也不会在 /
/// 上加锁。
/// 若调用方需要跨实例共享 provider、在惰性初始化期间协调 provider 切换,或希望生成代码自动补齐这些约束,应优先使用
/// [ContextAware] 生成路径;若场景本身由框架主线程驱动,且只需要最小化的实例级上下文缓存,则该基类更直接。
///
public abstract class ContextAwareBase : IContextAware
{
///
/// 获取或设置当前实例缓存的架构上下文。
///
///
/// 该属性不执行同步;调用方应保证对同一实例的访问遵循其自身线程模型。
///
protected IArchitectureContext? Context { get; set; }
///
/// 设置架构上下文的实现方法,由框架调用。
///
/// 要设置的架构上下文实例。
///
/// 该实现只做简单赋值,然后调用 ;不与 共享锁。
///
void IContextAware.SetContext(IArchitectureContext context)
{
Context = context;
OnContextReady();
}
///
/// 获取架构上下文。
///
/// 当前架构上下文对象。
///
/// 当 为空时,该实现会直接回退到 。
/// 该回退过程不执行额外同步,也不支持替换 provider;如需这些能力,请改用生成的 ContextAware 实现。
///
IArchitectureContext IContextAware.GetContext()
{
Context ??= GameContext.GetFirstArchitectureContext();
return Context;
}
///
/// 当上下文准备就绪时调用的虚方法,子类可以重写此方法来执行上下文相关的初始化逻辑。
///
protected virtual void OnContextReady()
{
}
}