Почти все привязки вашего контейнера служб будут зарегистрированы у поставщиков услуг, поэтому в большинстве этих примеров будет продемонстрировано использование контейнера в этом контексте.
Нет необходимости связывать классы в контейнереесли они не зависят от каких-либо интерфейсов.Контейнеру не нужно указывать, как строить эти объекты, поскольку он может автоматически разрешать эти объекты с помощью отражения.
Простые привязки
Внутри поставщика услуг у вас всегда есть доступ к контейнеру через свойство $this->app
.Мы можем зарегистрировать привязку, используя метод bind
, передавая имя класса или интерфейса, которое мы хотим зарегистрировать, вместе с Closure
, который возвращает экземпляр класса:
$this->app->bind('HelpSpot\API', function ($app) {
return new HelpSpot\API($app->make('HttpClient'));
});
Примечаниечто мы получаем сам контейнер в качестве аргумента для распознавателя.Затем мы можем использовать контейнер для разрешения зависимостей объекта, который мы строим.
Связывание A Singleton
SingletonМетод связывает класс или интерфейс в контейнер, который должен быть разрешен только один раз.После разрешения одноэлементной привязки тот же экземпляр объекта будет возвращен при последующих вызовах в контейнер:
$this->app->singleton('HelpSpot\API', function ($app) {
return new HelpSpot\API($app->make('HttpClient'));
});