PHP не поддерживает дуэт дженериков для сложности производительности во время выполнения. Таким образом, нет никакого способа объяснить, что вы ожидаете все интерфейсы через определение подрядчика. Таким образом, вы должны настроить DI-контейнер вручную. Чтобы явно указать, что вашему классу нужны все классы, поддерживающие некоторый интерфейс.
Laravel для конфигурации используйте ServiceProvider для выполнения всех видов конфигурации: В классе \App\Providers\AppServiceProvider
вы можете настроить создание вашего класса.
public function register(): void
{
// to configure implementation for an interface or abstract class
// you can only configure one implementation for interface
$this->app->bind(\App\IFoo::class, \App\FooA::class);
// or 'tag' several implementation for one string tag.
$this->app->tag([\App\FooA::class, \App\FooB::class], \App\IFoo::class);
$this->app->bind(\App\Bar::class, function(\Illuminate\Contracts\Foundation\Application $container){
// get all tagged implementations
$foos = $container->tagged(\App\IFoo::class);
return new \App\Bar($foos);
});
}