VContainer-scoping/lifetime-overview | 作用域——生命周期管理总览
- Singleton(单例): 全容器共享唯一实例。
- 同容器内不可重复注册同一类型。
- Transient(瞬时): 每次解析时创建新实例。
- Scoped(作用域内): 每个
LifetimeScope保持独立实例。- 如果 LifetimeScope 是唯一的,则类似于 Singleton。
- 如果创建了子 LifetimeScope,每个子作用域将有不同的实例。
- 当 LifetimeScope 被销毁时,会释放资源并调用所有注册的
IDisposable。
父子关系的生命周期
LifetimeScope 可以构建父子关系。
表现如下:
- 如果未找到注册的对象,
LifetimeScope会查找父级LifetimeScope。 - 对于
Lifetime.Singleton- 基本上始终返回相同实例。
- 父作用域和子作用域有相同的类型时,优先返回最近的作用域实例。
- 当
LifetimeScope被销毁时,实现了IDisposable的对象会调用Dispose()。
- 对于
LifeTime.Transient- 每次解析都生成新实例。
- 父作用域和子作用域存在同类型注册时,子作用域会创建自己的实例。
- 对于
Lifetime.Scoped- 每个子作用域保持独立实例。
- 同一子作用域内实例相同。
- 父作用域和子作用域存在同类型注册时,子作用域会创建自己的实例。
- 当
LifetimeScope被销毁时,实现了IDisposable的对象会调用Dispose()。
- 每个子作用域保持独立实例。
:::caution
如果场景仍然存在,而 LifetimeScope 被销毁,注册为 Lifetime.Scoped 的 MonoBehaviours 不会自动销毁。
如果想在 LifetimeScope 销毁时一起销毁,可以将这类对象设置为 LifetimeScope 的子对象,或主动实现 IDisposable。
:::

浙公网安备 33010602011771号