У вас есть базовая проблема с внедрением зависимостей Symfony, я рекомендую вам шаг за шагом прочитать документацию о сервисном контейнере , это базовая возможность Symfony (и других фреймворков) и очень важно.
Если вы определите свои расширения как сервис после того, как вам не нужно будет вызывать конструктор. Если вы хотите получить один из этих сервисов в зависимости от значения расширения, я бы создал другой сервис под названием AnalyserExtensionFactory, который будет выглядеть примерно так:
<?php
declare(strict_types=1);
namespace App\Analyser\Extension;
class AnalyserExtensionFactory
{
public function __construct(Class1 $class1, Class2 $class2)
{
$this->class1 = $class1;
$this->class2 = $class2;
}
public function getByExtension(Extension $extension) : ?ClassInterface
{
switch ($extension->getName()) {
case 'class1':
return $this->class1;
case 'class2':
return $this->class2;
}
return null;
}
}
И после использования этот завод в вашей функции run()
.
ClassInterface должен быть реализован в ваших Class1 и Class2 (и иметь методы setAnalyse
, input
и run
)
Расширенный совет: эту фабрику можно сделать чище с помощью служебной метки