在Unity中,依赖关系何时通过反射确定



除了注册的依赖项之外,通过反射确定的依赖项(如注入的依赖项)是在依赖项的生存期内还是在DI容器的生存期期间完成的?

编辑:DI容器在心中是统一的。

编辑:精化:我很好奇反射过程发生了多少次,我也想弄清楚Unity构建中使用反射的阶段是否会找到构造函数和属性。根据MSDN(Source)的说法,Unity构建的第四个阶段是"预创建",即"第四阶段。对构造函数、属性等的反思在这里执行。"这个阶段运行了多少次?在构建容器的过程中,还是每次都需要解决构造函数和属性依赖关系?这种情况发生在寄存器解析释放模式的哪个部分?

Unity使用一个名为StrategyChain的构建管道来创建对象。每次从容器中解析对象时,都会运行此管道。

该管道中的每一步都是作为一种战略来实施的。这些策略查找称为BuilderPolicies的值。这些策略封装了策略积累的信息(比如使用反射来确定要使用哪个构造函数、要注入哪些属性等)。第一次为特定类型运行管道时,策略会将策略放入名为PolicyList的存储中。下次管道被要求构建该类型时,这些值将被重用,因此所涉及的工作只需花费一次。


更新

我猜你指的是ASP.NET?实际上有两个PolicyLists。一个只在StrategyChain(瞬态)中存活一个周期,另一个与容器的寿命相耦合。只要您的UnityContainer实例未被处理或垃圾回收,它就会一直存在。您可能感兴趣的一件事是:您不能序列化您的容器。因此,您不能告诉运行在web场上的应用程序将其存储在缓存中并在服务器之间共享。

相关内容

  • 没有找到相关文章

最新更新