Szukaj…
Wiązanie interfejsu do implementacji
W metodzie register
dostawcy usług możemy powiązać interfejs z implementacją:
public function register()
{
App::bind( UserRepositoryInterface::class, EloquentUserRepository::class );
}
Odtąd za każdym razem, gdy aplikacja będzie potrzebować wystąpienia UserRepositoryInterface
, Laravel będzie automatycznie wstrzykiwał nowe wystąpienie EloquentUserRepository
:
//this will get back an instance of EloquentUserRepository
$repo = App::make( UserRepositoryInterface:class );
Wiązanie instancji
Możemy użyć kontenera usług jako rejestru, wiążąc w nim instancję obiektu i odzyskując go, gdy będzie nam potrzebny:
// Create an instance.
$john = new User('John');
// Bind it to the service container.
App::instance('the-user', $john);
// ...somewhere and/or in another class...
// Get back the instance
$john = App::make('the-user');
Wiązanie singletonu do kontenera usług
Możemy powiązać klasę jako Singleton:
public function register()
{
App::singleton('my-database', function()
{
return new Database();
});
}
W ten sposób za pierwszym razem, gdy wystąpi żądanie 'my-database'
do kontenera usług, zostanie utworzone nowe wystąpienie. Wszystkie kolejne żądania tej klasy odzyskają pierwszą utworzoną instancję:
//a new instance of Database is created
$db = App::make('my-database');
//the same instance created before is returned
$anotherDb = App::make('my-database');
Wprowadzenie
Kontener usług jest głównym obiektem aplikacji. Można go użyć jako kontenera wstrzykiwania zależności i rejestru dla aplikacji, definiując powiązania u dostawców usług
Dostawcy usług to klasy, w których definiujemy sposób, w jaki nasze klasy usług będą tworzone przez aplikację, ładujemy ich konfigurację i łączymy interfejsy z implementacjami
Usługi to klasy, które łączą jedno lub więcej skorelowanych zadań razem
Używanie kontenera serwisowego jako kontenera wstrzykiwania zależności
Możemy użyć kontenera usług jako kontenera wstrzykiwania zależności, wiążąc proces tworzenia obiektów z ich zależnościami w jednym punkcie aplikacji
Załóżmy, że utworzenie PdfCreator
wymaga dwóch obiektów jako zależności; za każdym razem, gdy musimy zbudować instancję PdfCreator
, powinniśmy przekazać te zależności konstruktorowi che. Używając kontenera usług jako DIC, definiujemy tworzenie PdfCreator
w definicji wiązania, biorąc wymaganą zależność bezpośrednio z kontenera usług:
App:bind('pdf-creator', function($app) {
// Get the needed dependencies from the service container.
$pdfRender = $app->make('pdf-render');
$templateManager = $app->make('template-manager');
// Create the instance passing the needed dependencies.
return new PdfCreator( $pdfRender, $templateManager );
});
Następnie, w każdym punkcie naszej aplikacji, aby uzyskać nowy PdfCreator
, możemy po prostu zrobić:
$pdfCreator = App::make('pdf-creator');
A kontener usługi utworzy nową instancję wraz z potrzebnymi dla nas zależnościami.