注1:我想说清楚:我不是试图延迟加载依赖项或注入延迟类型.
大多数(所有?)IoC容器都需要在容器中注册元数据,以描述在询问时应如何解析某些类型; 这包括接口的实现,对象的生命周期等.在过去几年中,基于流畅/约定的API已被添加到大多数(所有?)IoC容器中,这在提供此功能时减少了大量噪音元数据到容器.
使用ninject,我使用基于约定的方法来注册我的元数据,但我是按需提供,而不是预先.这样可以在集成测试场景中节省大量性能,您可以在其中创建~10个对象; 您将失去每次测试都必须注册整个应用程序依赖项的开销.
注意2:请不要告诉我不要在集成测试中使用IoC容器.
在可用时转向使用Microsoft组件存在一些压力,因此Unity正在我的视野中.我有基于约定的注册工作,但我无法弄清楚如何在Ninject中按需/懒惰地"发现"这个元数据.
我第一次尝试实现这个是在UnityContainer实例周围使用包装器,并在包装器上调用GetInstance(type)后,我可以查询容器以查看该类型是否已注册.如果没有,我可以调用我的约定,发现元数据,并注册类型.然而,这种方法只有一个层次; 如果该类型注入了更多依赖项,则每个依赖项都不会被反馈到GetInstance(type)方法中,因此,我的困境.
问题:我如何懒惰/按需添加类型注册到Unity?
Source会很好,但是指向容器中钩子的指针也同样好.我尝试了继承,但没有像Ninject那样覆盖.
.net dependency-injection ninject ioc-container unity-container