除了已注册的依赖项之外,是通过反射确定的依赖项,例如注入的依赖项,是根据依赖项的生命周期还是在DI容器的生命周期内完成的?
编辑:DI容器就是Unity。
编辑:详细说明:我很好奇反射过程发生了多少次,并且还希望有关天气的清晰度,或者使用反射的Unity构建中的阶段将找到构造函数和属性。根据MSDN(Source),Unity构建的第四个阶段是“Precreation”是“第四阶段。在这里执行构造函数,属性等的反思”。这个阶段运行了多少次?在构造容器期间,还是每次构造函数和属性依赖都需要解决?注册解析发布模式的哪一部分会发生在?
答案 0 :(得分:2)
Unity使用名为StrategyChain
的构建管道来创建对象。每次从容器中解析对象时都会运行此管道。
该管道中的每个步骤都作为策略实施。这些策略查找名为BuilderPolicies
的值。这些策略封装了策略积累的信息(比如使用反射来确定要使用的构造函数,要注入的属性等)。第一次为特定类型运行管道时,策略将策略放入名为PolicyList
的存储中。下次要求管道构建该类型时,这些值将被重用,因此所涉及的工作只需花费您一次。
<强>更新强>
我猜你的意思是ASP.NET?实际上有两个PolicyLists
。一个只能通过StrategyChain
(瞬态)生活一个周期的一个周期和一个与容器寿命相关的周期。只要您的UnityContainer
实例未被处理或垃圾收集,它就会存在。您可能感兴趣的一件事:您无法序列化您的容器。因此,您无法告知在Web场上运行的应用程序将其存储在缓存中并在服务器之间共享。