我想创建一个Doctrine EventSubscriber,它依赖于Storage Service(我自己的类),而后者依赖于"@doctrine.orm.entity_manager"
。这创建了一个循环引用,因为Doctrine显然依赖于我的新EventSubscriber类。
依赖路径变为如下:
EventSubscriber --> Storage --> Doctrine EM --> EventSubscriber --> ...
据我了解,我有两种解决方法:
重构我的存储服务并确保它不依赖于EntityManager,将$em
作为方法参数传递
将@service_container
注入EventSubscriber,然后从容器中提取存储服务。令人惊讶的是,这对于任何循环引用都有效并且没有抱怨。 SonataMediaBundle就是这样做的。
方法1要求我重写很多代码。此外,Storage类无法在没有实体管理器的情况下工作,因此将其作为可选参数类型并不合理。
方法2在EventSubscriber中注入了许多不必要的东西。它似乎被加载到每个Symfony请求上。
我的问题: