Symfony5: Внедрение сервисов по имени - PullRequest
0 голосов
/ 04 августа 2020

Допустим, у меня есть класс:

class Car
{
    private Engine $engine;

    public function __construct(Engine $engine)
    {
        $this->engine = $engine;
    }
}

Теперь я могу go до config/services.yaml и добавить такую ​​конфигурацию:

StandardCar:
    class: App\Car
    arguments: ['@StandardEngine']

SuperCar:
    class: App\Car
    arguments: ['@SuperEngine']

Обычно я бы использовал Car класс в конструкторе для внедрения экземпляра, но если теперь я хочу ввести конкретный c автомобиль, как я могу его ввести?

Я знаю, что могу ввести ContainerInterface, а затем сделать что-то вроде этого :

$myCar = $container->get('SuperCar`);

Однако я заметил, что это может быть невозможно в будущем:

 # ./bin/console debug:autowiring
 [...]
 ContainerInterface is the interface implemented by service container classes.
 Symfony\Component\DependencyInjection\ContainerInterface (service_container) - deprecated
 [...]

Также на веб-сайте git symfony я обнаружил примечание, что при использовании ContainerInterface устарело, и я должен явно настраивать службы - что, очевидно, я и пытаюсь сделать, но как мне их затем внедрить?

...