@galliard

Как в laravel зарегистрировать сервис, зависящий от других сервисов?

В документации обычно приводят пример сервис-провайдера, где регистрируемый сервис либо ни от чего не зависит, либо зависит от каких-то примитивных типов, передаваемых в конструктор, например, из конфига.

А что делать, если в конструктор сервиса нужно передать другой сервис?

UPD:
class ServiceA
{
    public function __construct(
        private int $scalarParam,
    ) {
    }
}

class ServiceB {
    public function __construct(
        private ServiceA $serviceA,
        private string $scalarParam,
    ) {
    }
}

class ServiceAProvider extends ServiceProvider
{
    public function register(): void
    {
        $this->app->singleton(ServiceA::class, function (): ServiceA {
            return new ServiceA(config('params.param1'));
        });
    }
}

class ServiceBProvider extends ServiceProvider
{
    public function register(): void
    {
        $this->app->singleton(ServiceB::class, function (): ServiceB {
            $serviceA = ...; // Как его получить?

            return new ServiceB($serviceA, config('params.param2'));
        });
    }
}
  • Вопрос задан
  • 141 просмотр
Пригласить эксперта
Ответы на вопрос 1
@inFureal
Сначала регистрируешь один сервис, потом другой, зависящий от первого.
Создавать экземпляр через app(Service::class). DI все за тебя подтянет
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы