サーチ…
インプリメンテーションへのインタフェースのバインド
サービスプロバイダregister
メソッドでは、インタフェースを実装にバインドできます。
public function register()
{
App::bind( UserRepositoryInterface::class, EloquentUserRepository::class );
}
今度は、アプリケーションがUserRepositoryInterface
インスタンスを必要とするUserRepositoryInterface
、Laravelは自動的にEloquentUserRepository
新しいインスタンスを挿入します:
//this will get back an instance of EloquentUserRepository
$repo = App::make( UserRepositoryInterface:class );
インスタンスのバインド
サービスコンテナをレジストリとして使用すると、オブジェクトのインスタンスをバインドし、必要なときに戻すことができます。
// 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');
サービスコンテナへのシングルトンのバインド
クラスをシングルトンとしてバインドすることができます:
public function register()
{
App::singleton('my-database', function()
{
return new Database();
});
}
このようにして、初めて'my-database'
インスタンスがサービスコンテナに要求されると、新しいインスタンスが作成されます。このクラスのすべての連続した要求は、最初に作成されたインスタンスを返します。
//a new instance of Database is created
$db = App::make('my-database');
//the same instance created before is returned
$anotherDb = App::make('my-database');
前書き
サービスコンテナが主要なアプリケーションオブジェクトです。これは、サービスプロバイダのバインディングを定義することによって、アプリケーションの依存性注入コンテナおよびレジストリとして使用できます
サービスプロバイダは、アプリケーションを通じてサービスクラスを作成し、その構成をブートストラップし、インプリメンテーションにインターフェイスをバインドする方法を定義するクラスです
サービスは、1つまたは複数のロジック相関タスクをまとめてラップするクラスです。
サービスコンテナを依存性注入コンテナとして使用する
依存関係を持つオブジェクトの作成プロセスをアプリケーションの1つのポイントにバインドすることによって、サービスコンテナを依存性注入コンテナとして使用できます
PdfCreator
の作成に2つのオブジェクトが依存する必要があるとしましょう。 PdfCreator
インスタンスをビルドする必要があるPdfCreator
、これらの依存関係をcheコンストラクタに渡す必要があります。サービスコンテナをDICとして使用することによって、バインディング定義でPdfCreator
の作成を定義し、サービスコンテナから直接必要な依存関係を取得します。
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 );
});
次に、私たちのアプリのあらゆる点で、新しいPdfCreator
を入手するPdfCreator
、私たちは簡単に行うことができます:
$pdfCreator = App::make('pdf-creator');
また、Serviceコンテナは、必要な依存関係とともに、新しいインスタンスを作成します。