对于DI我使用微软的Unity。 对于动态看点编织我正在使用剑杆织机。结合依赖注入和动态方面编织
方面编织器要求我使用工厂方法Weaver.CreateInstance(System.Type)
实例化编织物体,并且不提供交织现有实例的方法。
DI容器允许我通过使用IUnityContainer.Resolve(System.Type)
方法来解决依赖关系,该方法解析了依赖关系,并实例化了注入类型的对象。
这两种方法显然有冲突。 什么是解决此冲突的推荐方法?
想法到目前为止我有:
- 查询映射和“手动解决”的依赖(使用
IUnityContainer.Registrations
属性)。创建一个组合的“DI + AOP”机制 - 给定要解析的类型 - 找到目标映射类型,然后使用Weaver实例化。 - 创建我自己的实现了
IUnityContainer
接口,它实例使用韦弗(而不是激活)
附:
如果我在这里偏离,冲突可以避免而不是解决 - 请让我知道。
有趣的问题!我的第一印象是创建一个'IUnityContainer'的新实现,它将方法调用映射到内部的'UnityContainer',但是重新实现'Resolve'以使用AOP工厂方法。但是,如果人们有其他想法,我很感兴趣。 –
检查Unity如何在内部工作,似乎重新实现“解决”决不是一项简单的任务......也不是重新实现“UnityContainer”用于执行“解决”方法的机制。检查Rapier-LOOM源代码显示,改变它实例化对象的方式也是非平凡的......如果达到任何结果,我将更新。 –
你为什么不使用Unity自己的动态拦截功能? –