除了注册的依赖项之外,通过反射确定的依赖项(如注入的依赖项)是在依赖项的生存期内还是在DI容器的生存期期间完成的?
编辑:DI容器在心中是统一的。
编辑:精化:我很好奇反射过程发生了多少次,我也想弄清楚Unity构建中使用反射的阶段是否会找到构造函数和属性。根据MSDN(Source)的说法,Unity构建的第四个阶段是"预创建",即"第四阶段。对构造函数、属性等的反思在这里执行。"这个阶段运行了多少次?在构建容器的过程中,还是每次都需要解决构造函数和属性依赖关系?这种情况发生在寄存器解析释放模式的哪个部分?
Unity使用一个名为StrategyChain
的构建管道来创建对象。每次从容器中解析对象时,都会运行此管道。
该管道中的每一步都是作为一种战略来实施的。这些策略查找称为BuilderPolicies
的值。这些策略封装了策略积累的信息(比如使用反射来确定要使用哪个构造函数、要注入哪些属性等)。第一次为特定类型运行管道时,策略会将策略放入名为PolicyList
的存储中。下次管道被要求构建该类型时,这些值将被重用,因此所涉及的工作只需花费一次。
更新
我猜你指的是ASP.NET?实际上有两个PolicyLists
。一个只在StrategyChain
(瞬态)中存活一个周期,另一个与容器的寿命相耦合。只要您的UnityContainer
实例未被处理或垃圾回收,它就会一直存在。您可能感兴趣的一件事是:您不能序列化您的容器。因此,您不能告诉运行在web场上的应用程序将其存储在缓存中并在服务器之间共享。