Где найти сервисные контейнеры в проекте Laravel? - PullRequest
0 голосов
/ 30 августа 2018

Где я могу найти Service Container в проекте Laravel .

Все Service Providers находятся в одном месте, в каталоге app/Providers, но где найти Service Container?

1 Ответ

0 голосов
/ 30 августа 2018

Служебный контейнер - это основной компонент платформы Laravel, который готов для использования в том виде, в каком он есть, вы не должны создавать свои собственные сервисные контейнеры, как, например, с поставщиками услуг.

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

Было бы проще представить, что сервисный контейнер - это черный ящик, который всегда доступен. Ваше приложение сначала регистрирует (помещает) определенные правила (например, если кто-то хочет объект, который реализует интерфейс PriceCalculator, тогда передайте ему объект класса MyPriceCalculator). Это делается методом register() ваших поставщиков услуг:

$this->app->bind('App\Contracts\PriceCalculator', 'App\Shop\MyPriceCalculator');

Тогда этот черный ящик всегда доступен для вас, поэтому, если вам когда-нибудь понадобится объект PriceCalculator (например, где-то в контроллере вашей корзины для расчета цены какого-либо заказа), вы можете теперь вместо:

$calculator = new \App\Shop\MyPriceCalculator;

Попросите сервисный контейнер сделать правильный выбор:

$calculator = app()->make('App\Contracts\PriceCalculator');

Обратите внимание, что мы просим сервисный контейнер предоставить нам реализацию интерфейса и, в свою очередь, предоставим нам новый App\Shop\MyPriceCalculator объект, потому что именно так мы определили (зарегистрировали) App\Contracts\PriceCalculator сервис ранее.

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

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

Официальную документацию вы можете прочитать здесь .

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