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

标签 php symfony

我在构造函数中使用多个依赖项注入(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/

相关文章:

php - 检查用户是否在 symfony 中被重定向?

php - 使用 Microsoft azure blob 空间

php - 如何使用 messages.en.yml 翻译 symfony2 形式的标签?

forms - 如何在一处显示所有表格错误

php - 为什么 pdo 不适用于具有空格字符的查询?

PHP SQL 表编辑带有内联链接的行

netbeans - 在 Netbeans 7.1 下运行 Symfony 2 应用程序的 PHPUnit 测试

symfony - 尝试重新加载灯具时出现问题

php - 检查 php 准备语句中是否为空

php - Twig 模板不能包含 php 模板