Зависимость Инъекция происходит только при использовании контейнера IoC/Service для разрешения класса или вызова метода. Если вы вызываете метод самостоятельно и у него есть необходимые аргументы, вы должны передать эти аргументы. Laravel не изменяет работу PHP.
Ни один из них никогда не будет включать в себя инъекцию зависимостей, поскольку они являются прямыми метод вызывает на объект и не использовать контейнер:
$this->anything(); // just a method call
$something->anything(); // just another method call
Причину вы получите зависимости конструктора впрыскиваются потому, что эти конкретные классы разрешаются используя контейнер IoC. Обычно фреймворк - это вызывающий код такого кода, а не вы напрямую. Когда инфраструктура вызывает метод в классе, он может использовать контейнер, чтобы сделать этот вызов, в который входит метод Injection.
Контейнер имеет call
метод с комментарием:
«Позвони данную Закрытие/класс @ метод и впрыснуть его зависимости.»
Метод провайдеров услуг boot
вызывается с помощью контейнера IoC и что метод будет иметь зависимости инжектированных в соответствии с документацией Laravel на поставщиков услуг.
«Вы можете использовать типы подсказок для метода загрузки вашего поставщика услуг. Контейнер службы автоматически вводит любые необходимые вам зависимости ..." Laravel 5.2 Docs - Service Providers - The Boot method
От Illuminate\Foundation\[email protected]
:
protected function bootProvider(ServiceProvider $provider)
{
if (method_exists($provider, 'boot')) {
return $this->call([$provider, 'boot']);
}
}
Приложение использует метод call
для вызова метода boot
на поставщике, поэтому вы можете ввести-подсказку параметры для метода boot
и получить метод Injection. Он напрямую не звонит boot
на объект провайдера, он использует контейнер для его вызова.
Чтобы использовать функции contai ner, контейнер должен использоваться.
- Это ссылка на Laravel 5.2, но IoC очень похожа на версии.
Что вызывает этот метод 'setSettings()'? – Hammerbot
@El_Matella 'Boot()' в пределах того же ServiceProvider –
@Aaran McGuire Пожалуйста, не добавляйте код в качестве изображений http://meta.stackoverflow.com/a/285557/5510499. –