Я изо всех сил пытаюсь получить конкретную услугу через имя класса из группы внедренных помеченных служб.
Вот пример: я отмечаю все службы, которые реализуют DriverInterface 'app.driver', и привязываю его к $Переменная drivers.
В каком-то другом сервисе мне нужно получить все те драйверы, которые помечены как app.driver, создать их экземпляр и использовать только несколько из них.Но то, что нужно, будет динамически.
services.yml
_defaults:
autowire: true
autoconfigure: true
public: false
bind:
$drivers: [!tagged app.driver]
_instanceof:
DriverInterface:
tags: ['app.driver']
некоторые другие службы:
/**
* @var iterable
*/
private $drivers;
/**
* @param iterable $drivers
*/
public function __construct(iterable $drivers)
{
$this->drivers = $drivers;
}
public function getDriverByClassName(string $className): DriverInterface
{
????????
}
Таким образом, службы, реализующие интерфейс драйвера, вводятся в $Это-> драйверы параметр как итеративный результат.Я могу только проповедовать через них, но тогда будут созданы все службы.
Есть ли какой-то другой способ внедрить эти службы, чтобы получить от них определенную службу через имя класса, не создавая экземпляры других?
PS Я знаю, что есть возможность сделать эти драйверы общедоступными и использовать вместо них контейнеры, но я бы хотел избежать внедрения в сервисы Cotaintainer, если это возможно.