【问题标题】:Put a symfony container inside a repository or an entity is a good or bad practice?将 symfony 容器放在存储库或实体中是好是坏?
【发布时间】:2017-05-13 18:54:53
【问题描述】:

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

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

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

【问题讨论】:

    标签: entity-framework symfony doctrine-orm doctrine


    【解决方案1】:

    有一些如何创建实体管理器(或存储库)的示例,相关的如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'));
        }
    

    在这种情况下,有相同角色的 UserManager 而不是存储库。

    在这个例子中,所有的服务都已经被初始化并直接注入到依赖注入中

    直接在bundle构造/或“编译”(依赖注入)内部调用(私有)服务比在服务内部colling容器更强大

    【讨论】:

      猜你喜欢
      • 2023-03-19
      • 2016-10-08
      • 1970-01-01
      • 1970-01-01
      • 2012-01-12
      • 2013-07-14
      • 1970-01-01
      • 2017-01-12
      • 1970-01-01
      相关资源
      最近更新 更多