ResetStaticsAssistant¶
- 种类:
static class - 命名空间:
Runestone.AesirArchitecture - 程序集:
Runestone.AesirArchitecture
继承链: System.Object → ResetStaticsAssistant
声明¶
静态变量重置助手(仅泛型类使用)。用于运行时阶段自动重置泛型类中的静态变量,兼容 Disable Domain Reload。 关闭 Domain Reload 时静态回调列表不会重置,所以每次启动时均可调用重置方法。
备注
适用范围:仅泛型类(如 AbstractContext
背景:Unity 默认在进入 Play Mode 时进行域重置(Domain Reload), 会清空所有静态字段的状态。但关闭 Domain Reload(即 "Enter Play Mode Options" 中的 "Reload Domain" 未勾选)后, 静态字段不会自动重置,上一次 Play Mode 的残留数据可能导致意外的行为或错误。
解决方案:此助手通过 [RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.SubsystemRegistration)] 在域加载的子系统注册阶段自动触发 ResetStaticsAll, 遍历并执行所有通过 Register 注册的重置回调,手动将静态字段恢复到初始状态。
方法¶
声明的方法
| 名称 | 描述 |
|---|---|
Register(Action) |
注册静态变量重置回调,在 Domain Reload 时自动调用 |
ResetForTests() |
手动执行所有已注册的静态变量重置回调。仅供单元测试隔离静态单例状态使用。 |
继承的方法
| 名称 | 描述 | 声明类型 |
|---|---|---|
GetType() |
— | object |
Equals(object) |
— | object |
GetHashCode() |
— | object |
ToString() |
— | object |
MemberwiseClone() |
— | object |
Finalize() |
— | object |
Register(Action)¶
注册静态变量重置回调,在 Domain Reload 时自动调用
备注
注册的回调会在每次域加载时由 ResetStaticsAll 自动执行,无需手动调用。 适用于重置任何在 Disable Domain Reload 模式下不会自动清空的静态字段。 约定:重置回调中禁止调用 Register—— 遍历回调列表时动态添加会导致 InvalidOperationException: Collection was modified。 当前全部注册均在静态构造函数中完成(一次性、非动态),不触发此问题。
参数
| 名称 | 类型 | 说明 |
|---|---|---|
callback |
Action |
静态变量重置回调,在域加载时自动执行,应将相关静态字段重置为初始值 |
ResetForTests()¶
手动执行所有已注册的静态变量重置回调。仅供单元测试隔离静态单例状态使用。
备注
EditMode 测试在同一域内重复运行时不会触发域重载,已注册的静态单例(如 AbstractContext
Additional Notes¶
首个
## Additional Notes是增量生成文档标识符,请勿修改标题级别和内容!本文档由Script Doc Generator辅助生成。