何时使用IOC容器?

16

我想了解何时应该使用容器而不是手动注入依赖项。如果我有一个应用程序,它使用1-2个接口,并且每个接口只有1-2个具体实现,那么我倾向于自己处理它们。

如果我有一个小型应用程序,它使用2-3个接口,每个接口有2-3个具体实现,我应该使用完整的容器吗?类似这样简单的东西是否就足够了?

基本上,我正在尝试理解何时适合手动处理这些依赖项,何时(或者是否)应该像上面那样使用简单的东西,以及何时使用像Ninject、Windsor等IOC容器。可能没有什么固定答案,但我怎样才能知道是使用IOC容器的时候了呢?


https://dev59.com/f3NA5IYBdhLWcg3wrP2q - Mauricio Scheffer
我不是在问为什么要使用其中之一,而是在问何时应该使用其中之一。我已经意识到了它们的好处,但我不确定什么时候是正确的时机使用其中之一。 - nivlam
1个回答

14
重要的是要认识到,您可以(并且应该)以DI友好但容器不可知的方式编写代码。
这意味着您应该始终将依赖项的组成推迟到无法再推迟的地步。这被称为组合根,通常放置在应用程序入口附近。
如果您以这种方式设计应用程序,则DI容器(或无DI容器)的选择围绕应用程序中的单个位置旋转,并且可以快速更改策略。
如果您只有几个依赖项,则可以选择使用穷人的DI,或者您可以选择使用完整的 DI容器。以这种方式使用,您不会依赖于任何特定的DI容器,因此选择在可维护性方面变得不那么关键
DI容器可帮助您管理复杂性,包括对象生命周期。像这里描述的那样使用,它不会做任何您不能手动编写的事情,但它会更好地完成并更简洁地完成。因此,我开始使用DI容器的门槛相当低。
一旦我超过了几个依赖项,我就会开始使用DI容器。大多数都很容易入门

更新:我对那个问题的2012年11月的回答


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接