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

Tow*_*wer 15 php symfony

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

它说:

$mailer = $this->get('my_mailer');
Run Code Online (Sandbox Code Playgroud)

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

如何使我的服务具有多个实例 - 即每当我到达服务时,我都会获得一个新实例?什么样的$this->getNew()东西?

Sgo*_*kes 32

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

services:
    my_service:
        class: Someclass
        scope: prototype
Run Code Online (Sandbox Code Playgroud)

注意:既然Symfony2.8 scope: prototype已经被替换了shared: false.

# Symfony >= 2.8
services:
    my_service:
        class: Someclass
        shared: false
Run Code Online (Sandbox Code Playgroud)

  • 有没有办法只强制重建有时并不总是? (4认同)

Lao*_*neo 7

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