注1:我想清楚:我不是试图延迟加载依赖或注入懒惰类型。惰性依赖注册与团结
大多数(所有?)IoC容器需要元数据与容器来描述如何当被问及某种类型应该可以解决注册;这包括接口的实现,对象的生命周期等等。在过去几年中,基于流利/惯例的API已经添加到大多数(所有)IoC容器中,这在提供这种容器时减少了很多噪音元数据到容器。
随着ninject,我使用基础的方法来注册我的元数据的惯例,但是我做它的需求,而不是前期。在创建〜10个对象的集成测试场景中,这会节省巨大的性能;您将失去必须在每次测试中注册整个应用程序依赖项的开销。
注2:请不要告诉我,你不应该在集成测试使用IoC容器。
有一定的压力移动到使用Microsoft组件时可用,所以团结就是在我的视野。我有基于约定的注册工作,但我无法弄清楚如何在Ninject中按需要/懒洋洋地“发现”这些元数据。
我第一次尝试实现这个是围绕UnityContainer实例使用一个包装器,并且在包装器上调用GetInstance(type)时,我可以查询容器以查看该类型是否已注册。如果没有,我可以调用我的约定,发现元数据并注册类型。然而,这种方法只能深入一层。如果该类型注入更多的依赖关系,则每个依赖关系都不会反馈回GetInstance(type)方法,从而成为我的困境。
问题:我怎样才能懒洋洋地/点播型注册添加到Unity?
来源将是很好的,但一个指向容器中的钩会一样好。我尝试了继承,但没有什么可以像Ninject一样重写。
你能举一个例子吗,你如何在Ninject中做到这一点?我可能能够弄清楚如何在Unity中做同样的事情。然而,直觉上,我同意这样的观点,即在大多数情况下,懒惰注册没有好处。在Unity中,注册一个类型映射只是创建六个非常小的对象并将它们放入特定的集合中。它不能太慢可以吗? – 2011-03-11 11:34:12