1

除了注册的依赖关系,是通过反射来确定相关性,比如注射的依赖关系,在问候完成所述依赖关系的或DI容器的使用寿命期间的寿命?在Unity中,什么时候通过反射来确定依赖关系?

编辑:DI容器的一点是统一。

编辑:精:我很好奇的反射过程出现的次数,并且也想关于天气或不舞台在Unity建立使用反射会发现构造和性能清晰。根据MSDN(Source)的说法,Unity版本的第四阶段是“Precreation”是“第四阶段”,这里对构造函数,属性等进行了反思。这个阶段运行多少次?在构建容器过程中,还是每次构造函数和属性依赖关系都需要解决? Register Resolve Release模式的哪一部分会发生这种情况?

+1

每个DI容器的作品。你有没有特别的想法? – 2012-02-03 20:04:14

+0

是的,我一直在使用的DI容器是Unity。我编辑了这个问题来反映这一点。 – 2012-02-03 20:09:29

+0

目前还不清楚在这里要问的是什么。你能详细说明吗?也许包括你问的理由? – 2012-02-03 20:41:12

回答

2

统一使用构建流水线叫StrategyChain创建对象。每当您从容器中解析对象时,都会运行此管道。

在管道中的每个步骤实现为策略。这些策略查找值为BuilderPolicies。这些策略封装了策略积累的信息(如使用反射来确定使用哪个构造函数,注入哪些属性等)。第一次为特定类型运行管道时,策略将策略放入名为PolicyList的商店中。下一次管道被要求构建这种类型时,这些值将被重用,因此涉及的努力应该只花费一次。


UPDATE

我猜你的意思是ASP.NET?其实有两个PolicyLists。一个只能通过StrategyChain(瞬态)存活一个周期,另一个与容器的寿命耦合。只要您的UnityContainer的实例未被丢弃或垃圾收集,它就会生活。有一件事可能会让你感兴趣:你不能序列化你的容器。因此,您无法告诉在Web场上运行的应用程序将其存储在缓存中并在服务器之间共享。以不同的方式

+0

PolicyList的生命周期是什么?在.net的场景中,它是每个会话吗? – 2012-02-06 20:02:32

+0

感谢您的更新,我很感激。假定每个解析的对象都立即释放(让所用的时间接近0毫秒)。解析并释放一个对象100次只能使用反射来确定一次流水线(只要容器没有垃圾收集)? – 2012-02-09 22:03:07

+1

@TravisJ如果你的对象使用transient/per resolve lifetime进行注册,它们将被解析,使用,然后像其他任何CLR对象一样被垃圾收集。如果他们使用单身生命周期进行注册,那么单个实例将被重用并因此不会被收集。在第一次解决之后,应该不需要容器再次使用反射。 – 2012-02-11 06:59:13