How to Define Non Shared Services
In the service container, all services are shared by default. This means that each time you retrieve the service, you'll get the same instance. This is usually the behavior you want, but in some cases, you might want to always get a new instance.
In order to always get a new instance, set the shared
setting to false
in your service definition:
1 2 3 4 5 6 7 8 9 10
// src/SomeNonSharedService.php
namespace App;
use Symfony\Component\DependencyInjection\Attribute\Autoconfigure;
#[Autoconfigure(shared: false)]
class SomeNonSharedService
{
// ...
}
1 2 3 4 5
# config/services.yaml
services:
App\SomeNonSharedService:
shared: false
# ...
1 2 3 4
<!-- config/services.xml -->
<services>
<service id="App\SomeNonSharedService" shared="false"/>
</services>
1 2 3 4 5 6 7 8 9 10 11
// config/services.php
namespace Symfony\Component\DependencyInjection\Loader\Configurator;
use App\SomeNonSharedService;
return function(ContainerConfigurator $container): void {
$services = $container->services();
$services->set(SomeNonSharedService::class)
->share(false);
};
Now, whenever you request the App\SomeNonSharedService
from the container,
you will be passed a new instance.
This work, including the code samples, is licensed under a
Creative Commons BY-SA 3.0
license.