2015-02-05 136 views
2

于是依赖注入。我了解概念(我认为!)和容器的使用。我无法理解的是让您的DI容器在任何地方都可用的最佳方式。正确使用依赖注入容器

如果你有一个DB类,你注入容器到构造函数中吗?所以你可以调用DI容器方法来创建依赖对象?

你对你的配置类,你的邮件类,你的记录类等做同样的事情吗?你如何让你的DI容器在任何地方都可用?

帮助感谢!

回答

1

我的理解是,你不要使它随处可用。您注册所有对象及其依赖关系,然后在构建对象时,IoC容器提供其所有依赖关系(以及第2,3和第n级依赖关系)。

所以foo需要酒吧,酒吧需要baz和qux,而qux需要quux。 Foo只需要注入条形图,IoC将负责为条形图提供依赖项的细节,等等。

如果foo以后需要制作更多条形图,那么它对条形工厂有依赖性,IoC也可以提供。

+0

此外,DI容器应该仅由一个框架或其它类似的基础设施代码不直接由其他的代码中使用的/可用的。这意味着您选择的框架必须支持DI和容器。 – MikeSW 2015-02-05 23:17:57

3

什么CJD说,如果你的DIC可无处不,那么这将是更像是一个Global Registry

在DB类的情况下,如果它的依赖通过类型暗示的参数传递类似,在文档中或以任何其他可接受的方式在外部定义它们,然后DIC可以注入这些依赖关系。

有用的资源:

安东尼FERRA/ircmaxell video on Dependency Injection

的Fabian Potencier article about whether you need a DIC

罗布·艾伦 video Introducing Dependency Injection

斯蒂芬Hochdorfer video The 7 Deadly Sins of Dependency Injection

马丁:

的StackOverflow:

+1

谢谢,有一些很好的资源 – CJD 2015-02-06 19:33:32