小抄:选择 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。
时间: 2024-10-16 10:28:35

小抄:选择 Unity 的对象生命周期管理员的相关文章

【iOS知识学习】_视图控制对象生命周期-init、viewDidLoad、viewWillAppe

iOS视图控制对象生命周期-init.viewDidLoad.viewWillAppear.viewDidAppear.viewWillDisappear.viewDidDisappear的区别及用途 init-初始化程序 viewDidLoad-加载视图 viewWillAppear-UIViewController对象的视图即将加入窗口时调用: viewDidApper-UIViewController对象的视图已经加入到窗口时调用: viewWillDisappear-UIViewCont

_视图控制对象生命周期-init、viewDidLoad、viewWillAppear、viewDidAppear、viewWillDisappear等的区别及用途

iOS视图控制对象生命周期-init.viewDidLoad.viewWillAppear.viewDidAppear.viewWillDisappear.viewDidDisappear的区别及用途 init-初始化程序 viewDidLoad-加载视图 viewWillAppear-UIViewController对象的视图即将加入窗口时调用: viewDidApper-UIViewController对象的视图已经加入到窗口时调用: viewWillDisappear-UIViewCont

IOS 视图控制对象生命周期-init、viewDidLoad、viewWillAppear、viewDidAppear、viewWillDisappear等的区别及用途

iOS视图控制对象生命周期-init.viewDidLoad.viewWillAppear.viewDidAppear.viewWillDisappear.viewDidDisappear的区别及用途 init-初始化程序 viewDidLoad-加载视图 viewWillAppear-UIViewController对象的视图即将加入窗口时调用: viewDidApper-UIViewController对象的视图已经加入到窗口时调用: viewWillDisappear-UIViewCont

Ninject之旅之三:Ninject对象生命周期

摘要 DI容器的一个责任是管理他创建的对象的生命周期.他应该决定什么时候创建一个给定类型的对象,什么时候使用已经存在的对象.他还需要在对象不需要的时候处理对象.Ninject在不同的情况下管理对象的生命周期提供了强大的支持.在我们定义一个绑定的时候,定义创建对象的范围.在那个范围内,对象将被重用,每次绑定只存在一次.注意,对象不允许依赖于生命周期比自己小的对象. 1.暂时范围 在暂时态范围内,对象生命周期不被Ninject进行管理.任何时候请求一个类型的对象,都将创建一新对象.Ninject不管

[Unity-10] Unity脚本的生命周期

做过Android开发的朋友应该都知道,Android每一个Activity都有一套完整的生命周期,Unity的脚本也有着类似的生命周期,下面就一起来看一下. 1.Awake():脚本唤醒.这个方法是脚本生成时执行的第一个方法,用来初始化脚本.脚本的整个生命周期中只执行一次. 2.Start():脚本开始.这个方法是在Awake()之后执行,也只执行一次. 3.Update():脚本更新.这个方法在Start()之后执行,每一帧都会执行一次,帧率越高执行的越频繁. 4.LateUpdate():

Unity脚本的生命周期

Unity脚本的生命周期 前言:Unity中定义了10个重要的事件函数,按照执行的先后顺序依次为以下的内容: (1):Reset:重置函数,编辑期当脚本赋值给游戏对象时触发,仅执行一次. (2):Awake:唤醒函数,最先执行的事件函数,用于优先级最高的事件处理,仅执行一次. (3):OnEnable:启用函数,当脚本启动的时候触发,随着脚本的不断启用与禁用可以执行多次. (4):Start:开始函数,一般用于给脚本字段赋初值使用,仅执行一次. (5):FixedUpdate:固定更新函数,以默

ASP.NET Core Web API下事件驱动型架构的实现(二):事件处理器中对象生命周期的管理

在上文中,我介绍了事件驱动型架构的一种简单的实现,并演示了一个完整的事件派发.订阅和处理的流程.这种实现太简单了,百十行代码就展示了一个基本工作原理.然而,要将这样的解决方案运用到实际生产环境,还有很长的路要走.今天,我们就研究一下在事件处理器中,对象生命周期的管理问题. 事实上,不仅仅是在事件处理器中,我们需要关心对象的生命周期,在整个ASP.NET Core Web API的应用程序里,我们需要理解并仔细推敲被注册到IoC容器中的服务,它们的生命周期应该是个怎样的情形,这也是服务端应用程序设

[翻译]理解C#对象生命周期

看到网上的一篇讲C#对象生命周期(Object Lifetime)的文章,通俗易懂,而且有图,很适合初学者学习,就翻译过来了.后来发现这是Pro C# 2010 and the .NET 4 Platform的第八章中的一部分.(感谢 大乖乖 提醒).文中的专业名词第一次出现时,括号里会标注对应的英文单词. 请尊重作者劳动,转载请注明出处:http://www.cnblogs.com/Jack47/archive/2012/11/14/2770748.html. ----2012年11月15日修

struts2.0中Action的对象生命周期详解!!(转)

原文出处:http://blog.csdn.net/wxy_g/article/details/2071662 有很多人问Struts2.0中的对象既然都是线程安全的,都不是单例模式,那么它究竟何时创建,何时销毁呢? 这个和struts2.0中的配置有关,我们来看struts.properties ### if specified, the default object factory can be overridden here ### Note: short-hand notation is