2010-11-11 70 views
8

我是IoC新手,我在玩Unity。假设你有'n'个项目的解决方案,并且你想使用Unity来注册和解决依赖关系。可以说你的作文根在项目a。假设您在解决方案中有以下项目。你如何处理IoC和DI的“深层”依赖关系?

一个 b Ç d

比方说一个取决于b东西,b取决于çç东西要看东西d

我看过哟ü可以使用构造器注入来解决A => b的依赖,但我坚持就如何B的上ç依赖可以在不访问已配置和创建项目一个容器来解决。

解决嵌套依赖的方法是什么? 是否有讨论/博客/例子来解决深度依赖关系的解决方案?

+0

[单元测试和依赖注入与深度嵌套的依赖关系]的可能的重复(http://stackoverflow.com/questions/4147018/unit-testing-and-dependency-injection-with-deeply-nested-dependencies) – 2010-11-11 16:21:42

+0

基于在链接可能的副本上,如果我在b中并且需要c的实例,我会问容器解决实例吗?即:C c = container.resolve ();如果我在C中,我是否也遵循相同的模式......这将要求所有项目都有权访问容器......这是一种理想的方法吗? – jparram 2010-11-11 17:11:43

+0

不,只有您的最高级别项目(应用程序或网站)应引用容器。低层应该甚至不需要知道具体的依赖关系。换句话说,在C内部,你永远不需要从D中解析一个类的具体实例。这是否合理? – 2010-11-11 17:51:11

回答

7

你的构图根应该创建并提供所有的依赖关系,包括嵌套关系,所以它需要引用所有相关的程序集(除非你使用反射提供它们)。

例如,在创建A之前,通常会创建B(提供其依赖关系,C)的实例。如果你做到了“by hand”,它应该是这样的:

C c = new C(); 
B b = new B(c); 
A a = new A(b); 

只要你注册的所有适当类型的,你的依赖注入框架将解决你的问题。

有关这方面的文章,请参阅MiškoHevery的“Dependency Injection Myth: Reference Passing”。

+0

感谢您的文章链接。它几乎描述了我正在努力的概念。 – jparram 2010-11-11 19:06:17

+0

不客气 - 当我阅读那篇文章时,为我点了很多东西,我很高兴听到它的帮助。 – 2010-11-11 19:10:44