将symfony容器放在存储库或实体中是一种好的做法或坏的做法



我见过大量使用原则的项目,其中一些项目将容器或其他服务注入存储库中。我还在这里看到了一些关于存储库中容器的问题:

  • 在实体存储库中注入容器
  • 依赖注入

我只在将容器或其他服务添加到存储库或实体时遇到问题。我认为可能会有一些副作用。例如,如果某些代码依赖于在特定上下文中不可用的服务,则我无法重用某些代码。例如,如果我的存储库依赖于SymfonyComponentHttpFoundationRequest则不能在命令中使用。

创建服务而不是耦合存储库可以成为更好的解决方案吗?

有一些关于如何创建实体管理器(或存储库(的示例,相关如 FOSUserBundle 中所述,其中原则实体管理器已作为对象管理器注入到依赖项注入中。

    if ('custom' !== $config['db_driver']) {
        if (isset(self::$doctrineDrivers[$config['db_driver']])) {
            $loader->load('doctrine.xml');
            $container->setAlias('fos_user.doctrine_registry', new Alias(self::$doctrineDrivers[$config['db_driver']]['registry'], false));
        } else {
            $loader->load(sprintf('%s.xml', $config['db_driver']));
        }
        $container->setParameter($this->getAlias().'.backend_type_'.$config['db_driver'], true);
    }
    if (isset(self::$doctrineDrivers[$config['db_driver']])) {
        $definition = $container->getDefinition('fos_user.object_manager');
        $definition->setFactory(array(new Reference('fos_user.doctrine_registry'), 'getManager'));
    }

在这种情况下,有具有相同角色的用户管理器而不是存储库。

在此示例中,所有服务都已初始化并直接注入到依赖项注入中

直接在捆绑包构造/或"编译"(依赖注入(中调用(私有(服务比在服务内部收集容器更强大

相关内容

  • 没有找到相关文章