Symfony Dependency Injection inject new instance of class Symfony Dependency Injection inject new instance of class symfony symfony

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