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.