Suche…


Binden einer Schnittstelle an die Implementierung

In einer Service Provider- register können wir eine Schnittstelle an eine Implementierung binden:

public function register()
{  
    App::bind( UserRepositoryInterface::class, EloquentUserRepository::class );        
}

Von nun an wird jedes Mal, wenn die App eine Instanz von UserRepositoryInterface , eine neue Instanz von EloquentUserRepository automatisch UserRepositoryInterface :

//this will get back an instance of EloquentUserRepository 
$repo = App::make( UserRepositoryInterface:class );

Instanz binden

Wir können den Service Container als Registry verwenden, indem wir eine Instanz eines Objekts darin binden und zurückholen, wenn wir es brauchen:

// 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'); 

Binden eines Singleton an den Service-Container

Wir können eine Klasse als Singleton binden:

public function register()
{
    App::singleton('my-database', function()
    {
        return new Database();
    });
}

Auf diese Weise wird beim ersten Anfordern einer Instanz von 'my-database' an den Service-Container eine neue Instanz erstellt. Alle aufeinanderfolgenden Anforderungen dieser Klasse erhalten die zuerst erstellte Instanz zurück:

//a new instance of Database is created 
$db = App::make('my-database'); 

//the same instance created before is returned
$anotherDb = App::make('my-database');

Einführung

Der Service Container ist das Hauptanwendungsobjekt. Es kann als Abhängigkeitsinjektionscontainer und als Registrierung für die Anwendung verwendet werden, indem Bindungen in den Dienstanbietern definiert werden

Service Provider sind Klassen, in denen definiert wird, wie unsere Serviceklassen über die Anwendung erstellt werden, ihre Konfiguration booten und Schnittstellen an Implementierungen binden

Dienste sind Klassen, die eine oder mehrere logisch korrelierte Aufgaben zusammenfassen

Verwenden des Service-Containers als Abhängigkeitsinjektionscontainer

Wir können den Service Container als Dependency Injection Container verwenden, indem wir den Erstellungsprozess von Objekten mit ihren Abhängigkeiten an einem Punkt der Anwendung binden

Nehmen wir an, die Erstellung eines PdfCreator benötigt zwei Objekte als Abhängigkeiten. Jedes Mal, wenn wir eine Instanz von PdfCreator , sollten wir diese Abhängigkeiten an den Konstruktor übergeben. Durch die Verwendung des Service-Containers als DIC definieren wir die Erstellung von PdfCreator in der Bindungsdefinition, wobei die erforderliche Abhängigkeit direkt vom Service-Container übernommen wird:

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 );    
});

Um in jedem Punkt unserer App einen neuen PdfCreator , können wir einfach PdfCreator tun:

$pdfCreator = App::make('pdf-creator');

Und der Service-Container erstellt eine neue Instanz mit den für uns erforderlichen Abhängigkeiten.



Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow