.. index:: single: DependencyInjection; Synthetic Services How to Inject Instances into the Container ------------------------------------------ In some applications, you may need to inject a class instance as service, instead of configuring the container to create a new instance. For instance, the ``kernel`` service in Symfony is injected into the container from within the ``Kernel`` class:: // ... use Symfony\Component\HttpKernel\KernelInterface; use Symfony\Component\HttpKernel\TerminableInterface; abstract class Kernel implements KernelInterface, TerminableInterface { // ... protected function initializeContainer() { // ... $this->container->set('kernel', $this); // ... } } Services that are set at runtime are called *synthetic services*. This service has to be configured so the container knows the service exists during compilation (otherwise, services depending on ``kernel`` will get a "service does not exist" error). In order to do so, mark the service as synthetic in your service definition configuration: .. configuration-block:: .. code-block:: yaml # config/services.yaml services: # synthetic services don't specify a class app.synthetic_service: synthetic: true .. code-block:: xml .. code-block:: php // config/services.php namespace Symfony\Component\DependencyInjection\Loader\Configurator; return function(ContainerConfigurator $configurator) { $services = $configurator->services(); // synthetic services don't specify a class $services->set('app.synthetic_service') ->synthetic(); }; Now, you can inject the instance in the container using :method:`Container::set() `:: // instantiate the synthetic service $theService = ...; $container->set('app.synthetic_service', $theService);