Ste*_*nte 15 php dependency-injection symfony
通常,当我需要将一个或多个服务注入另一个服务时,我会明确注入每个服务.但是,我有一种情况,注入服务容器本身将使事情变得更容易.我知道这不是推荐的做法,但我很好奇技术原因是什么阻止了这一点.它是合法的,因为它太资源密集,或者更个人的感觉,它太乱了?
Rya*_*ndy 23
如果注入容器,则不会清除依赖项.事实上,你比以前更加模糊他们.如果你有这样的课......
class DocumentCreator(IFileNamer fileNamer, IRepository repository)
{ ... }
Run Code Online (Sandbox Code Playgroud)
...你可以看到依赖是什么.您还可以轻松地模拟这些依赖项以进行单元测试,以确保您隔离DocumentCreator并且可以知道任何测试失败都是由其代码而不是其依赖项中的代码造成的.
另一方面,如果你这样做......
class DocumentCreator(IDependencyContainer container)
{ ... }
Run Code Online (Sandbox Code Playgroud)
......你掩盖了依赖关系.如果不检查类的内部,你不可能知道它需要一个IFileNamer和一个IRepository.
您也不能轻易知道需要将哪些模拟放入容器中以测试DocumentCreator.模拟IDependencyContainer根本不会帮助你; 您的类仍然会在测试中失败,因为容器不包含IFileNamer和IRepository,除非您检查类的内部以查看它们是否是必需的.
您描述的是一个ServiceLocator。这被认为是现代应用程序设计中的反模式。本文介绍了原因。