【发布时间】:2014-08-16 13:42:56
【问题描述】:
是否可以覆盖/扩展Symfony\Component\DependencyInjection\Container::get() 方法?我想要自动创建服务,当它不包含在容器中时,但服务类存在。
例如:
服务名称是My.MyBundle.Model.FooRepository
此名称的服务不存在,但是当我调用时:
$container->get('My.MyBundle.Model.FooRepository');
检查\My\MyBundle\Model\FooRepository 的class_exists,当它存在时,添加到容器并返回它。这个新服务的依赖将由kutny/autowiring-bundle解决。
此功能只能针对某些命名空间或接口进行扩展,在生产环境中可以缓存,但对于开发将是很好的帮助。
有什么想法吗?
【问题讨论】:
-
为什么不使用jmsyst.com/bundles/JMSDiExtraBundle 之类的东西,这样您的服务中就有注释,因此您不必维护 services.yml。 AFAIK DI 容器中的服务仅在您实际调用它们时创建。
-
感谢捆绑包的提示,它很有用。然而,我提出的解决方案用于另一个项目,对我们的团队来说非常容易上瘾。
-
Symfony\Component\HttpKernel\Kernel 类有 getContainerClass 和 getContainerBaseClass 方法。可能会尝试与他们混在一起。
标签: php symfony dependency-injection autowired