依赖注入的一个好处是,类的依赖关系在其接口(即构造函数)中显式定义。但是,如果使用依赖注入容器,则许多这些依赖项将合并为一个依赖项(容器)。因此,许多类的真正依赖项隐藏在容器后面。这是如何避免的,以便在使用依赖注入容器时仍然明确定义依赖关系?
答案 0 :(得分:0)
您的bean定义中似乎可以使用'depends-on'属性在代码中添加显式依赖项。我在这里找到了类似的问题
答案 1 :(得分:0)
是和否,这实际上取决于依赖注入容器的工作方式。
我认为这种代码没有任何问题:
class Class1 {
/**
* @Inject
* @var Class2
*/
private $class2;
}
即使依赖项将由容器注入,Class1
依赖于Class2
的事实也是相当明确的。 (此处使用的依赖注入容器是PHP-DI)
答案 2 :(得分:0)
3年前我问过这个问题,后来逐渐理解并喜欢静态类型语言中的DI。
看起来当我问这个问题时,我并没有理解“服务定位器”与“服务定位器”之间的区别。和一个依赖注入容器' (DIC)。
DIC在"以下"应用程序并负责构建对象和构建对象图,通常在引导期间但在应用程序完全引导之前。 类不应该知道DIC并且不应该依赖它。 DIC应该构造所有类的依赖关系并注入它们,好像该类是手动实例化一样。
服务定位器是一个在系统中传递并用于查找依赖关系的对象。使用服务定位器掩盖了依赖关系(我在学习这些东西时注意到的原始问题)并创建了系统范围的依赖关系(即服务定位器本身)。
通常,我会避免使用服务定位器模式(有些人称之为"反模式")。使用像Ninject或Symfony 2这样的DIC这样的好DIC会让你的课程专注于其中的业务逻辑 - 而不是寻找依赖关系。
阅读Martin Fowlers关于依赖注入的文章:http://www.martinfowler.com/articles/injection.html