Symfony Dependency Injection inject new instance of class
Scopes have been deprecated since 2.8. Use shared: false
instead.
http://symfony.com/doc/current/cookbook/service_container/shared.html
services: session: class: Vendor\Core\Session arguments: [ "@inject.me" ] inject.me: class: Class\To\Inject shared: false
I now that this question is pretty old but here is a trick that you could use to avoid define every simple class as service defining a "factory class" service that receive the class to create as argument and after through "expression language" inject as argument:
<?phpfinal class ClassFactory{ public static function create($class, array $arguments = []) { return new $class($arguments); }}
create the new service
app.class_factory:class: ClassFactory
after inject the new classes like that:
arguments: ['@=service("app.class_factory").create("Monolog\Logger")']
For Symfony >=2.8 you can take a look to the "auto-wiring" feature also -> http://symfony.com/blog/new-in-symfony-2-8-service-auto-wiring
Yes, all classes you inject should be services. You can give them a scope of prototype
to create a new instance each time it's requested.
For more information see: http://symfony.com/doc/current/cookbook/service_container/scopes.html