кодесурса
«Laravel

Laravel (5.7) Сервисный контейнер

script1adsense2code
script1adsense3code

Контейнер сервисов в Laravel - это контейнер внедрения зависимостей и реестр для приложения. Преимущества использования сервисного контейнера перед созданием вручную ваших объектов:

Способность управлять зависимостями класса от создания объекта:

Вы определяете, как объект должен быть создан в одной точке приложения (привязка), и каждый раз, когда вам нужно создать новый экземпляр, вы просто запрашиваете его в контейнере службы, и он создаст его для вас вместе с требуемым Например, вместо создания объектов вручную с новым ключевым словом:

//everytime we need YourClass we should pass the dependency manually
$instance = new YourClass($dependency);

Вместо этого вы можете зарегистрировать привязку в контейнере службы:

//add a binding for the class YourClass 
App::bind( YourClass::class, function()
{
    //do some preliminary work: create the needed dependencies
    $dependency = new DepClass( config('some.value') );
    //create and return the object with his dependencies
    return new YourClass( $dependency );
});

и создайте экземпляр через сервисный контейнер с:

//no need to create the YourClass dependencies, the SC will do that for us!
$instance = App::make( YourClass::class );

С помощью автоматического внедрения зависимостей Laravel, когда в некоторой части приложения требуется интерфейс (то есть в конструкторе контроллера), конкретный класс автоматически создается контейнером службы. Изменение конкретного класса в привязке изменит конкретные объекты, созданные во всех ваших приложениях:

//every time a UserRepositoryInterface is requested, create an EloquentUserRepository 
App::bind( UserRepositoryInterface::class, EloquentUserRepository::class );
//from now on, create a TestUserRepository 
App::bind( UserRepositoryInterface::class, TestUserRepository::class );

Использование сервисного контейнера в качестве реестра

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

// Create an instance.
$kevin = new User('Kevin');
// Bind it to the service container.
App::instance('the-user', $kevin);
// ...somewhere and/or in another class...
// Get back the instance
$kevin = App::make('the-user');

В заключение, по сути, Service Container - это объект Application: он расширяет класс Container, получая все функциональные возможности контейнера.

Предыдущий: Laravel (5.7) Запрос жизненного цикла
Далее: Поставщики услуг Laravel (5.7)

Новый контент: Composer: менеджер зависимостей для PHP , R программирования


script1adsense4code
script1adsense5code
disqus2code
script1adsense6code
script1adsense7code
script1adsense8code
buysellads2code