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.



Modified text is an extract of the original Stack Overflow Documentation
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow