namespace GFramework.Core.Abstractions.StateManagement;
///
/// 表示一次 Store 分发流程中的上下文数据。
/// 中间件和 Store 实现通过该对象共享当前 action、分发时间以及归约结果。
///
/// 状态树的根状态类型。
public sealed class StoreDispatchContext
{
///
/// 初始化一个新的分发上下文。
///
/// 当前分发的 action。
/// 分发前的状态快照。
/// 当 为 时抛出。
public StoreDispatchContext(object action, TState previousState)
{
Action = action ?? throw new ArgumentNullException(nameof(action));
PreviousState = previousState;
NextState = previousState;
DispatchedAt = DateTimeOffset.UtcNow;
}
///
/// 获取当前分发的 action 实例。
///
public object Action { get; }
///
/// 获取当前分发的 action 运行时类型。
///
public Type ActionType => Action.GetType();
///
/// 获取分发前的状态快照。
///
public TState PreviousState { get; }
///
/// 获取或设置归约后的下一状态。
/// Store 会在 reducer 执行完成后使用该值更新内部状态。
///
public TState NextState { get; set; }
///
/// 获取或设置本次分发是否导致状态发生变化。
/// 中间件可读取该值进行日志和诊断,但通常应由 Store 负责最终判定。
///
public bool HasStateChanged { get; set; }
///
/// 获取本次分发创建时的时间戳。
///
public DateTimeOffset DispatchedAt { get; }
}