如何隐藏真实IoC容器库?
-
21-08-2019 - |
题
我想从我所选择IoC容器库(统一)隔离我的所有代码。要做到这一点,我创建了公开注册()和决心()的接口的IContainer。我创建了一个名为UnityContainerAdapter类,它实现的IContainer和包装真正的容器。因此,只有其中UnityContainerAdapter定义组件知道的统一库。
我在我的隔离思想泄漏。对一个类型的成员属性统一搜索,知道在哪里可以注入的依赖关系。我所看到的大多数也是国际奥委会库支持。我的问题是,我想使用的功能,但我不希望我的班有统一特定属性的依赖。
你有没有关于如何解决这个问题有什么建议?
理想情况下我将创建自己的[依赖]属性,并使用该一个在我的代码。但我要告诉真正的容器我的属性,而不是它自己的搜索。
解决方案 2
我找到了答案:统一使用一个扩展来配置他们所谓的“选择策略”。以取代统一使用的属性,你只要编写自己的UnityDefaultStrategiesExtension类的版本并注册您自己的“选择策略”使用您自己的属性。
请参阅上的统一的CodePlex站点此篇了解细节上如何做到这一点。
我不知道,这将是容易的,如果我切换到另一个的IoC库做相同的,但认为解决我的问题,现在。
其他提示
查看公共服务定位器项目:
在普通的服务定位器库 包含用于共享接口 位置服务的应用程序和 框架开发人员可以参考一下。 该库提供了一个抽象 在IoC容器和服务 定位器。使用该库允许 应用间接访问 功能不依赖于硬 引用。希望的是,使用 这个库,第三方应用程序 和框架可以开始利用 不占用IOC /服务定位 自己下来到一个特定的 实施
编辑:这似乎没有解决您的使用依赖注入的基于属性的声明愿望。您可以选择不使用它,或找到一种方法,抽象的属性,以多次喷射库(比如你提到的)。
即用声明接口的基本问题 - 它们被设置到一个特定的实现。
就个人而言,我坚持构造函数注入,所以我就不会遇到这个问题。
Couldn't你刚才设置你的配置,而属性,在XML。这使得它更有点“不清楚”我知道,我个人使用XML和属性的组合,但至少是“解决”您的依赖团结的事情。