Symfony循环引用与EventListener的依赖于需要EntityManager的服务



为了简单起见,我有一个服务'tenantcontext',该服务从每个请求上从数据库中检索当前的租户,因此需要EntityManager。

此外,我想将所有与租户建立多个关系的实体自动关联,然后在冲洗之前自动将其自动关联,因此我实施了一个租户,该租户将检测这些实体并进行协会(setTenant(setTenant())。为此,TenantListener需要租户。

这是我的services.yml

services:
    tenant.service.tenant_context:
        class: TenantBundleContextTenantContext
        arguments: [ "@doctrine.orm.entity_manager" ]
    tenant.event_listener.tenant_listener:
        class: TenantBundleEventListenerTenantListener
        arguments: [ "@tenant.service.tenant_context" ]
        tags:
            - { name: doctrine.event_listener, event: preFlush }

这种配置给我一个循环参考错误:

  [SymfonyComponentDependencyInjectionExceptionServiceCircularReferenceException]
  Circular reference detected for service "doctrine.dbal.default_connection", path: "doctrine.dbal.default_connection".

如果我正确理解,通过将实体标记为" doctrine.event_listener",我正在制作依赖tenantlistener的学说实体,该tenantlistlistener依赖于tenantContext,该tenantContext再次取决于教义EntityManager等。

我已经研究了类似的Symfony循环循环参考Dectrine onFlush事件侦听器服务的例外,但我的情况有所不同。theantcontext除了the the the the the the the the the the the the the the the the titymanager外,以许多不同的方式使用。

我看不到解决这个圆圈的解决方案。我该如何解决?

您可能不想注入EntityManager,而是将学说注册表注入您的tenant.service.tenant_context服务:

services:
    tenant.service.tenant_context:
        class: TenantBundleContextTenantContext
        arguments: [ "@doctrine" ]

有关如何访问TenantBundleContextTenantContext类中EntityManager实例的示例:

namespace TenantBundleContext
use SymfonyBridgeDoctrineRegistryInterface;
class TenantContext
{
    protected $doctrine;
    public function __construct(RegistryInterface $doctrine)
    {
        $this->doctrine = $doctrine;
    }
    public function getEntityManager()
    {
        return $this->doctrine->getEntityManager();
    } 
}

相关内容

  • 没有找到相关文章

最新更新