如何定义非共享服务
在服务容器中,所有服务都是默认共享的。这意味着每次你取出服务时,你将得到相同 的实例。这种行为通常是你需要的,但在某些场合下,你可能需要一个全新 实例。
为了能始终得到新实例,在你的服务定义中,设置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')
或者注入此服务,你将取出一个新的实例。