商店软件6:获取实体存储库的正确方法是什么



我注意到从Shopware6控制器或服务中获取实体存储库的三种不同方法。

  1. 将repo作为容器参数注入,例如
<argument type="service" id="product.repository"/>
  1. 从DefinitionInstanceRegistry检索它,例如
$productRepository =  $this->definitionInstanceRegistry->getRepository(ProductDefinition::ENTITY_NAME);
  1. 直接从容器中获取,例如
$productRepository = $this->container->get('product.repository');

在我看来,这三种方法都产生了相同的结果。有什么区别(如果有的话(,建议使用什么方法?

注入服务作为参数总是更可取的。为了从体系结构的角度进行更详细的解释,我推荐这个问题的公认答案。

至于DefinitionInstanceRegistry,它取决于您的服务是否必须处理各种不同的实体,例如,当您想要动态地决定读取或写入哪种类型的实体时。然后,使用注册表而不是注入更多的单个存储库可能是有意义的,但它根本不应该是您的首选解决方案。

最新更新