Symfony事件订阅者Doctrine实体管理器的循环依赖关系

时间:2016-03-27 22:01:46

标签: doctrine-orm doctrine symfony

我想创建一个Doctrine EventSubscriber,它依赖于Storage Service(我自己的类),而后者依赖于"@doctrine.orm.entity_manager"。这创建了一个循环引用,因为Doctrine显然依赖于我的新EventSubscriber类。

依赖路径变为如下:

EventSubscriber --> Storage --> Doctrine EM --> EventSubscriber --> ...

据我了解,我有两种解决方法:

  1. 重构我的存储服务并确保它不依赖于EntityManager,将$em作为方法参数传递

  2. @service_container注入EventSubscriber,然后从容器中提取存储服务。令人惊讶的是,这对于任何循环引用都有效并且没有抱怨。 SonataMediaBundle就是这样做的。

  3. 方法1要求我重写很多代码。此外,Storage类无法在没有实体管理器的情况下工作,因此将其作为可选参数类型并不合理。

    方法2在EventSubscriber中注入了许多不必要的东西。它似乎被加载到每个Symfony请求上。

    我的问题:

    • 还有其他方法可以解决这个问题吗?
    • 将整个服务容器注入EventSubscriber会不会有性能损失?

0 个答案:

没有答案