Когда использовать отложенный поставщик услуг?

Я прочитал документ laravel, в котором говорится:

Если ваш провайдер только регистрирует привязки в сервис-контейнере, вы можете отложить его регистрацию до тех пор, пока одна из зарегистрированных привязок не понадобится.

Я не понимаю, что такое "только регистрация привязок". Я гуглил и читал много статей, но не нашел ответа. Не могли бы вы помочь мне понять это!

Большое спасибо ^^


person ray    schedule 16.12.2018    source источник


Ответы (1)


Вот документация Laravel о привязках. Короче говоря, он сообщает контейнеру службы, что возвращать, когда требуется какой-либо класс или интерфейс. (Вы можете узнать больше, прочитав о внедрении зависимостей и внедрении зависимостей в PHP). Но поставщики услуг Laravel не ограничиваются только привязкой классов в контейнере. Внутри провайдеров вы можете указывать на папки маршрутов, регистрировать композиторов view() и т. д.

Если у вас в сервис-провайдере нет другого кода, кроме регистрации привязок, то вы можете отложить его, чтобы код работал быстрее. Но если, например, у вас есть вторая папка маршрутов, которую вы регистрируете в сервис-провайдере, то не стоит откладывать регистрацию сервис-провайдера.

person naneri    schedule 16.12.2018
comment
Хорошее объяснение. Примером может служить HorizonServiceProvider, который делает гораздо больше. чем просто добавить привязки к контейнеру службы. Если бы вы отложили его выполнение, некоторые функции не работали бы до тех пор, пока вам не потребовалась бы одна из служб, привязанных к провайдеру. - person Namoshek; 16.12.2018
comment
Спасибо за ответ и пример. У меня есть еще один вопрос. Я знаю, что $this-›app-›bind(..) привязывается к контейнеру. Однако как определить код примера, который связывает другой маршрут. Привязка ($this-›app-›bind(..)), я думаю, что она просто привязывает что-то к контейнеру службы, и я не нашел другого синтаксиса laravel для привязки чего-то к маршруту. Не могли бы вы объяснить это? Благодарю вас! - person ray; 16.12.2018
comment
@ray github.com/laravel/ framework/blob/ здесь Laravel привязывает маршруты из папок web и api - person naneri; 16.12.2018
comment
Думаю, я понял, что вы говорите. Вы имеете в виду, что поставщик услуг может сделать многое. Если он ТОЛЬКО регистрирует что-то в служебном контейнере, он может быть написан поставщиком услуг DEFER. Верно!? - person ray; 17.12.2018
comment
Кто-нибудь знает тогда, почему IdeHelperServiceProvider отложен, но имеет метод boot? - person Brett; 31.07.2019