• 小抄:选择 Unity 的对象生命周期管理员


    Unity 框架提供了数种生命周期管理员,各有相同和相异之处。刚开始接触时,难免头昏。
    制作这张小抄,只是为了要帮助自己理解和记忆。如果你也用 Untiy,或可参考看看。

    文字說明:

    • TransientLifetimeManager:每次解析时一律建立新的对象,且 Unity 容器不会保存该对象的参考(即容器不负责释放该对象)。此控制模式一般称为 Transient。
    • ContainerControlledLifetimeManager:每次解析时都固定返回同一个既有对象,并且在容器本身摧毁时一并释放该对象。此生命周期模式的效果等同于 Singleton 模式。这也是呼叫 RegisterInstance 方法时的默认生命周期管理员。
    • PerResolveLifetimeManager:类似 TransientLifetimeManager,主要差别在它在深层解析的过程中会重复使用同一个对象,而不会每次都建立新的对象。
    • PerThreadLifetimeManager:基本上,此生命周期等于是线程范围内的 Singleton。其行为与 ContainerControlledLifetimeManager 雷同,差别仅在于它会依线程来决定是否要建立新的对象。此生命周期管理员不负责释放对象。
    • ExternallyControlledLifetimeManager:与 ContainerControlledLifetimeManager 一样具有 Singleton 的效果,但主要的差别在于,ExternallyControlledLifetimeManager 是保存对象的弱参考(weak reference)。如此一来,你就可以完全掌控释放对象的时机,例如在用完对象时立刻呼叫它的 Dispose 方法来释放该对象。显然,此生命周期管理员不负责释放对象。
    • HierarchicalLifetimeManager:用于阶层式容器,亦即容器本身又包含了子容器的场合。基本上,此生命周期的行为等同于 ContainerControlledLifetimeManager 再加上对子容器的额外控制:子容器有自己的 Singleton 范围,不会跟父容器共享同一个对象。
    • PerRequestLifetimeManager:此生命周期管理员只适用于 Web 应用程序。它能够确保在同一个 HTTP 请求的范围内解析某类型时总是返回同一个对象。基本上,它就是一次 HTTP 请求范围内的 Singleton。   
  • 相关阅读:
    git常用命令笔记(二)
    Git for Windows安装和从Github下载工程
    为什么Mac或者Windows经常要配置环境变量?
    javagradle安装gradle的两种方式以及配置环境变量
    Macmac安装和使用homebrew
    收藏之关键词[git]搜索结果
    MAC电脑配置MYSQL JAVA MAVEN环境变量
    多测师讲解 python+selenium自动化测试讲解线性脚本(2) 高级讲师肖sir
    多测师讲解__app面试指导课_高级讲师肖sir
    多测师讲解__linux_高级讲师肖sir
  • 原文地址:https://www.cnblogs.com/huanlin/p/choosing-unity-lifetime.html
Copyright © 2020-2023  润新知