具有多个实例的Symfony 2服务?

时间:2012-03-26 09:26:00

标签: php symfony

我读到了这个:http://symfony.com/doc/current/book/service_container.html

它说:

$mailer = $this->get('my_mailer');
  

作为一个额外的奖励,Mailer服务只创建一次而且   每次请求服务时都会返回相同的实例。这是   几乎总是你需要的行为(它更灵活和   功能强大),但稍后我们将了解如何配置服务   有多个实例。

如何让我的服务拥有多个实例 - 即每当我到达服务时,我都会获得一个新实例?像$this->getNew()之类的东西?

2 个答案:

答案 0 :(得分:31)

您正在谈论服务的范围。你可以查看它们here。简而言之,将服务定义为范围原型而不是默认容器,依赖注入容器将在每次请求时创建一个新对象:

services:
    my_service:
        class: Someclass
        scope: prototype

注意:自Symfony2.8起,scope: prototype已被shared: false取代。

# Symfony >= 2.8
services:
    my_service:
        class: Someclass
        shared: false

答案 1 :(得分:7)

在Symfony> = 2.8中,不推荐使用范围属性,并删除版本3。您需要使用此处所述的共享设置http://symfony.com/doc/current/cookbook/service_container/shared.html

相关问题