【问题标题】:Extending of Symfony containerSymfony 容器的扩展
【发布时间】: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


【解决方案1】:

这不是直接回答您的问题,但也许是在回答您的需求:如果您想在 Symfony 项目中实现“自动装配”,您可以在 Symfony 中使用 PHP-DI。 PHP-DI 是一个替代容器,可以进行自动装配(Symfony 没有)。

查看Symfony 2 integration documentation,看看它是否适合您的账单。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-24
    • 2021-03-22
    • 1970-01-01
    • 1970-01-01
    • 2012-09-02
    相关资源
    最近更新 更多