Всем добрый вечер.
Обычно я пишу на symfony, но сейчас проект на laravel попался, поэтому прошу не воспринимать в штыки мои аналогии.
В общем подскажите пожалуйста по DI. Хотелось бы автоматически передать на вход фабрике список имплементаций определенного интерфейса. В прошлый раз когда я обращался с этим вопросом, то дошли до такого варианта:
$this->app->tag(SomeInterface::class, 'some.method');
$this->app->bind(SomeFactory::class, function ($app) {
return new SomeFactory($app->tagged('some.method'));
});
К сожалению он не работает, поскольку формирует ошибку
Target [App\...\SomeInterface] is not instantiable while building ...
Я полазил и по инету и по доке и все сходится к тому, что в laravel нет никакого аналога тегирования по instanceof. А на вход ->tag требуется что-то, что можно создать ( не абстрактный класс и не интерфейс ). Но как бы хотелось бы именно гибкую фабрику, которой не надо прописывать все реализации вручную, а достаточно унаследовать соответствующий интерфейс.
Возможно кто-то уже сталкивался и подскажет как это обойти? Пробовал имитировать за счет get_declared_classes
+ class_implements
, но в первом не нужных мне классов, видимо рано вызываю