> Symfony中文手册 > 如何定义非共享服务

如何定义非共享服务

在服务容器中,所有服务都是默认共享的。这意味着每次你取出服务时,你将得到相同 的实例。这种行为通常是你需要的,但在某些场合下,你可能需要一个全新 实例。

为了能始终得到新实例,在你的服务定义中,设置shared选项为false

1
2
3
4
5
6
# app/config/services.yml
services:
    app.some_not_shared_service:
        class: ...
        shared: false
        # ...
1
2
3
4
<!-- app/config/services.xml -->
<services>
    <service id="app.some_not_shared_service" class="..." shared="false" />
</services>
1
2
3
4
5
6
7
// app/config/services.php
use Symfony\Component\DependencyInjection\Definition;
 
$definition = new Definition('...');
$definition->setShared(false);
 
$container->setDefinition('app.some_not_shared_service', $definition);

现在,不管你何时调用$container->get('app.some_not_shared_service')或者注入此服务,你将取出一个新的实例。