How to Define Non Shared Services
Warning: You are browsing the documentation for Symfony 2.x, which is no longer maintained.
Read the updated version of this page for Symfony 7.2 (the current stable version).
2.8
The shared
option was introduced in Symfony 2.8. Prior to Symfony
2.8, you had to use the prototype
scope.
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 often 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
# app/config/services.yml
services:
app.some_not_shared_service:
class: ...
shared: false
# ...
Now, whenever you call $container->get('app.some_not_shared_service')
or
inject this service, you'll receive a new instance.