这是我目前所知道的:
DI让我可以构建可重复使用的,可单元测试的组件
DI很冗长,因为它要求我明确设置依赖项(通过构造函数或方法。虽然我仍然不理解接口注入)。这就是需要容器或服务定位器的原因。
容器优于服务定位器,因为类不需要知道它的存在。
但我发现了这些问题:
现在有些类会依赖Container吗?如果我没有为每个类使用默认配置,如我的服务文件中所述,某些类需要调用容器来重新配置所需的对象。
在此幻灯片http://www.slideshare.net/fabpot/dependency-injection-with-php-53的第79页上,Fabien Potencier说Container不管理所有对象,只管理那些具有单个实例(但不是单例)的对象。我现在更加困惑。
非常感谢任何帮助。 =)
答案 0 :(得分:0)
某些类现在将依赖于Container?
没有。这就是你使用依赖注入而不是服务位置的原因。
从此幻灯片第79页开始......
见第82页,它说“与模型对象不同”。老实说,我从来没有像那样解释它(“只有一个实例的对象(!= Singletons)”或者是错误的或者非常特定于PHP的东西,它一般不适用于依赖注入或IoC + DI容器),但是我打赌他试图解释的是容器通常管理类似服务的东西,而不是类似模型的东西。