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。
:::

posted @   凌雪寒  阅读(9)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
点击右上角即可分享
微信分享提示