应该在哪里创建Unity容器并解析引用?

时间:2011-07-07 15:17:04

标签: c# design-patterns unity-container ioc-container

假设我有一个名为IHash的服务合约调用的哈希组件。我有一个需要使用散列的组件DLL。我们使用Unity来创建一个松散耦合的系统。

我应该创建Unity容器并解析组件DLL本身的引用吗?

或者我应该在组件DLL构造函数中传递IHash引用,并让组件DLL的调用者处理Unity容器并解析IHash。

public myComponentDLL(IHash Hasher) { }

似乎我创建了容器并在组件DLL中解析它,Unity并没有给我太多购买。我认为在构造函数中传递它会带来更大的好处。

除了上述两种方法之外,还有更好的方法吗?这是一个好习惯吗?

2 个答案:

答案 0 :(得分:4)

将单元传递给组件不是一个好习惯,你不会通过查看它的构造函数来了解它的依赖性,因为它只需要IUnityContainer,并且上帝知道里面会有多少个结算构造函数。

最佳做法是通过构造函数传递接口(如您所做),并使用组件接口统一解析组件。解析你的组件时,选择IHash并注入它。

答案 1 :(得分:4)

应用程序中应该引用IoC容器的唯一位置是应用程序的根目录。您在此处注册所有组件并解析程序的根组件。然后,Unity将满足根组件所需的所有依赖项以及所有这些组件的依赖关系,依此类推,直到构建整个依赖关系图。有关详细信息,请参阅http://devtrends.co.uk/blog/how-not-to-do-dependency-injection-the-static-or-singleton-container