サーチ…


インプリメンテーションへのインタフェースのバインド

サービスプロバイダ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コンテナは、必要な依存関係とともに、新しいインスタンスを作成します。



Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow