我在doctor.yaml中定义了两个不同的实体经理
entity_managers:
EM1:
naming_strategy: doctrine.orm.naming_strategy.underscore
mappings:
App\EM1:
is_bundle: false
type: annotation
dir: '%kernel.project_dir%/src/BC1/Domain/Entity'
prefix: 'BC1\Domain\Entity'
alias: App\EM1
EM2:
naming_strategy: doctrine.orm.naming_strategy.underscore
mappings:
App\EM2:
is_bundle: false
type: annotation
dir: '%kernel.project_dir%/src/BC2/Domain/Entity'
prefix: 'BC2\Domain\Entity'
alias: App\EM2
我在我的服务中注入了一个理念实体管理界面:
服务中心
DoctrineRepository:
class: BC\Infrastructure\Persistence\DoctrineRepository
arguments:
- "@Doctrine\\ORM\\EntityManagerInterface"
DoctrineRepository.php
public function __construct(
EntityManagerInterface $client
) {
$this->entityManager = $client;
}
我希望能够选择在使用DoctrineRepository时要使用的先前定义的实体管理器(EM1、EM2)。理想的情况是:
$this->entityManager->useEntityManager('EM2');
我是否需要注入另一个服务而不是Doctrine\ORM\EntityManager接口?我已调试实体管理器加载,发现它在生成缓存时自动分配第一个:
cache/dev/getDoctrineRepositoryService.php:
return $this->privates['DoctrineRepository'] = new BC\Infrastructure\Persistence\DoctrineRepository(($this->services['doctrine.orm.EM1_entity_manager'] ?? $this->load('getDoctrine_Orm_EM1EntityManagerService.php')));
任何帮助都将不胜感激,谢谢。
由于有两个服务实现相同的接口
,因此需要帮助Symfony的自动布线
。
如文件中所述:
您可以从TransformerInterface接口创建一个普通别名,然后从一个特殊字符串创建一个命名的自动配电别名,该字符串包含接口,后跟一个与您在进行注入时使用的变量名称相匹配的变量名称
就你而言
# the ``App\EM2`` service will be
# injected when an ``Doctrine\ORM\EntityManagerInterface``
# type-hint for a ``$em2Manager`` argument is detected.
Doctrine\ORM\EntityManagerInterface $em2Manager: '@App\EM2'
# If the argument used for injection does not match, but the
# type-hint still matches, the ``Doctrine\ORM\EntityManagerInterface``
# service will be injected.
Doctrine\ORM\EntityManagerInterface: '@App\EM1'
我想我找到了另一个解决办法。我没有注入EntityManagerInterface,而是注入了@Doctrine本身(它注入了一个Doctrine\Bundle\DoctrineBundle\Registry对象),从该对象可以生成一个$object-
我正在浏览与依赖项注入相关的Symfony 2文档,但找不到自动连线的参考。我发现一个捆绑包提供了一些这方面的功能,但它仍处于测试阶段,似乎与注释有关(如果我错了,请纠正我)。 我要寻找的是一个对象(比如服务容器),它可以通过setter注入在我的服务中注入依赖项。 例如,我将定义一个服务: 然后,我可以使用这个假设的服务容器在服务中注入依赖项,即使这个依赖项是在容器外部创建的: 是否有DI容器可
在Synfony 3.3中,DI的新最佳实践 是使用普通构造函数依赖项注入(或控制器中的“操作”注入),而不是通过$this获取公共服务- 如官方留档所见 因此,无需指定服务,因为我们可以在类控制器中键入提示: 这似乎工作得很好,但如果我扩展了一个类并在构造函数中添加了更多参数呢??? 现在我得到一个循环引用错误: [Symfony\Component\DependencyInjection\Ex
问题内容: 在我的NestJS应用程序中- 我有TypeScript类,这些类中已经注入了其他类和值。唯一的是,我要导入带有语句的TypeScript类,并使用DI系统注入它们。有什么方法可以删除导入语句并让DI系统处理它? 问题答案: TL; DR ->类参考 DI->类实例化 可以通过字符串标记进行匹配,但最好使用类引用。 封装形式 依赖项注入系统主要处理类的实例化。这很好,因为您不必关心要注
有没有可能使控制器依赖于他们的服务,而不是通过使用服务容器,而是通过纯粹的构造函数依赖注入? 我希望以这种方式编写控制器: 不幸的是,正如我所看到的,Symfony ControllerResolver不通过ServiceContainer而是通过简单的调用创建新的控制器实例。
我有以下实体: 我想为包含在
问题内容: 我在数据访问层中将JPA-2.0与Hibernate一起使用。 为了进行审核日志记录,我通过在persistence.xml中配置以下属性来使用Hibernate的EmptyInterceptor: 凡 AuditLogInterceptor 扩展Hibernate的’ org.hibernate.EmptyInterceptor ‘。 我在数据访问层中使用JPA实体管理器来执行数据库