gpt4 book ai didi

php - Symfony 创建新服务作为新实例

转载 作者:可可西里 更新时间:2023-11-01 00:29:03 25 4
gpt4 key购买 nike

我在构造函数中使用多个依赖项注入(inject)定义了一个服务。在某些时候,我想将服务作为一个新实例而不是已经创建的同一个实例。请注意,通常我希望共享服务,但在边缘情况下我想创建一个新实例,因此服务定义中的共享选项不适用。

我可以创建一个新对象,但我必须手动注入(inject)依赖项,我更愿意让 symfony 来处理它。

那么我该如何告诉 Symfony 将服务作为新实例返回呢?

谢谢。

最佳答案

据我所知,没有办法告诉 Symfony 依赖注入(inject)容器有时返回共享实例,有时返回新的服务实例。

默认情况下,服务是共享的,正如您已经发现的那样。你可以告诉容器create a not-shared service通过在您的服务定义中将 shared 设置设置为 false:

# app/config/services.yml
services:
AppBundle\SomeNonSharedService:
shared: false

有了这些知识,我认为您的问题的解决方案是使用不同的名称创建共享服务的副本,并将其标记为未共享,如上文所述。当您要求容器获取副本时,它每次都会创建一个新实例。

不要尝试创建副本作为原始服务的别名,这是行不通的。第一件事执行Contaner::get()所做的是在别名列表中搜索作为参数提供的服务 ID,如果在那里找到它,则使用原始服务的 ID。

关于php - Symfony 创建新服务作为新实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47268892/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com