【问题标题】:Where should Unity containers be created and references be resolved?应该在哪里创建 Unity 容器并解析引用?
【发布时间】:2011-09-30 13:47:07
【问题描述】:

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

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

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

public myComponentDLL(IHash Hasher) { }

如果我创建容器并在组件 DLL 中解析它,Unity 似乎并没有给我买太多。我看到在构造函数中传递它有更大的好处。

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

【问题讨论】:

  • 请不要在发布问题一小时后将答案标记为已接受。关于这个话题我有很多话要说,但是看到已经接受的答案并不能激励我写下另一个答案——毕竟,显然你已经有了答案,或者至少已经有了让你满意的答案。
  • @Sander 我没有标记,因为这表明相当新。

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


【解决方案1】:

将统一传递给组件不是一个好习惯,通过查看它的构造函数你不知道它的依赖关系,因为它只需要IUnityContainer,上帝知道构造函数内部会有多少解析.

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

【讨论】:

  • 将此标记为答案,但如果您有其他要提供的内容,其他人可以随时回答。谢谢。
  • 你最好不要接受它一段时间,否则你的问题不会被注意到。
  • 对不起,我对此很陌生。问的第一个问题。我没有标记。
  • 刚刚做了,我先放几天,如果没有其他人回答,给你打勾。
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 2012-08-24
    • 2015-11-09
    • 2011-07-08
    • 2021-10-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-05
    相关资源
    最近更新 更多