假设我有一个名为IHash的服务合约调用的哈希组件。我有一个需要使用散列的组件DLL。我们使用Unity来创建一个松散耦合的系统。
我应该创建Unity容器并解析组件DLL本身的引用吗?
或者我应该在组件DLL构造函数中传递IHash引用,并让组件DLL的调用者处理Unity容器并解析IHash。
public myComponentDLL(IHash Hasher) { }
似乎我创建了容器并在组件DLL中解析它,Unity并没有给我太多购买。我认为在构造函数中传递它会带来更大的好处。
除了上述两种方法之外,还有更好的方法吗?这是一个好习惯吗?
答案 0 :(得分:4)
将单元传递给组件不是一个好习惯,你不会通过查看它的构造函数来了解它的依赖性,因为它只需要IUnityContainer
,并且上帝知道里面会有多少个结算构造函数。
最佳做法是通过构造函数传递接口(如您所做),并使用组件接口统一解析组件。解析你的组件时,选择IHash并注入它。
答案 1 :(得分:4)
应用程序中应该引用IoC容器的唯一位置是应用程序的根目录。您在此处注册所有组件并解析程序的根组件。然后,Unity将满足根组件所需的所有依赖项以及所有这些组件的依赖关系,依此类推,直到构建整个依赖关系图。有关详细信息,请参阅http://devtrends.co.uk/blog/how-not-to-do-dependency-injection-the-static-or-singleton-container。