Laravel - разница между синглтоном и привязкой экземпляра в сервисном контейнере - PullRequest
1 голос
/ 07 января 2020

В сервисном контейнере Laravel я могу связать как синглтон, так и экземпляр. из Laravel do c,

Binding A Singleton

Метод singleton связывает класс или интерфейс в контейнер, который должен разрешаться только один раз. После разрешения одноэлементной привязки тот же экземпляр объекта будет возвращен при последующих вызовах в контейнер:

$this->app->singleton('HelpSpot\API', function ($app) {
    return new HelpSpot\API($app->make('HttpClient'));
});

Экземпляры привязки

Вы также можете связать существующий экземпляр объекта в контейнер с помощью метода экземпляра. Данный экземпляр всегда будет возвращаться при последующих вызовах в контейнер:

$api = new HelpSpot\API(new HttpClient);

$this->app->instance('HelpSpot\API', $api);

Q1) Так в чем же разница между этими двумя понятиями? Могу ли я догадаться, что для одноэлементной привязки Laravel при первом запросе строит сам объект через внутренний механизм сервисного контейнера, а затем передает его при последующих вызовах, тогда как в случае привязки экземпляра сервисному контейнеру явно предоставляется уже созданный объект, который он предоставляет на каждый запрос?

или есть какое-то другое объяснение?

Q2) Зачем нам нужны оба варианта связывания?

1 Ответ

0 голосов
/ 08 января 2020

Разница между singleton и instance

Эти два понятия очень похожи. Единственное отличие состоит в том, что вы передаете либо класс / интерфейс, либо объект.

Singleton docs:

Метод singleton связывает класс или интерфейс в контейнер, который должен быть решен только один раз. После разрешения одноэлементной привязки тот же экземпляр объекта будет возвращен при последующих вызовах в контейнер

Документы экземпляра

Вы также можете привязать существующий экземпляр объекта к Контейнер с использованием метода экземпляра. Данный экземпляр всегда будет возвращаться при последующих вызовах в контейнер

Зачем нам нужны оба?

Ответ на этот вопрос, вероятно, коренится в философии Laravel. Из того, что я вижу в большинстве функций Laravel, есть несколько способов решения проблемы. Такое ощущение, что это тоже один из них. Есть небольшие различия, которые могут сделать использование singleton или instance предпочтительным в некоторых случаях.

Использование Singleton

Использование singleton поможет сохранить легкость вашего приложения, поскольку эти классы / интерфейсы не создаются, если они не используются.

Использование экземпляра

В некоторых случаях вы, возможно, уже создали объект, который вам все еще нужно внедрить в другие места. Вот тут и приходит instances.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...