翻译Laravelにおけるサービスコンテナのコンセプトは何ですか?

オリジナルリンク:
https://stackoverflow.com/questions/37038830/what-is-the-concept-of-service-container-in-laravel#answer-37039108

Laravelはサービスコンテナは、依存性注入コンテナである、また、レジストラを適用しました

あなたが手でオブジェクトを作成すると、サービスの容器を使用することの利点は以下のとおりです。

経営者が能力を必要とするとき依存オブジェクトが作成されています

あなたが解決することが必要な依存関係を一緒に入れて、問題を作成し、オブジェクトはあなたが唯一のコンテナにサービスを提供するために持っていたインスタンスを作成する必要があるたびに、作成されるべきかのアプリケーションで指定されます

たとえば、代わりに手動で新しいキーワードを使用してオブジェクトを作成します:

//每日次我们需要YourClass类时,我们需要手动传入一个依赖
$instance = new YourClass($dependency);

あなたは、サービスバインドされた容器にサインアップすることができます。

//为YourClass类添加一个绑定
App::bind( YourClass::class, function()
{
    //做一些准备工作:创建一个必要的依赖
    $dependency = new DepClass( config('some.value') );

    //创建并且返回对象的依赖
    return new YourClass( $dependency );
});

:によってサービス容器のインスタンスを作成します。

//没必要去创建YourClass类依赖,服务容器将为我们做!
$instance = App::make( YourClass::class );

特定のクラスを結合界面

インターフェースが(例えば、コントローラ・コンストラクタとして)アプリケーションに必要とされる場合、Laravel自動依存性注入を使用して、具体的なサービスクラスが自動的にコンテナをインスタンス化されます。結合時に具象クラスの変更は、それがアプリケーションオブジェクトの具体例を変更します:

//每一次UserRepositoryInterface接口被请求,将会创建一个EloquentUserRepository类
App::bind( UserRepositoryInterface::class, EloquentUserRepository::class ); 

レジストラとしてサービスコンテナを使用します

あなたが作成し、コンテナ固有のインスタンスに格納し、それらを取得することができます:結合達成するためのApp ::インスタンスメソッドを使用して、あなたは、レジストラとしてコンテナを使用することができます。

//创建一个实例
$kevin = new User('Kevin');

//绑定到服务容器。
App::instance('the-user', $kevin);

//做一些其他事情

//获取对象实例
$kevin = App::make('the-user'); 

最後に、それはコンテナが実際にサービスアプリケーションオブジェクトであることに留意すべきである:彼はContainerクラスから継承し、この方法は、すべてのコンテナを得ることができます

おすすめ

転載: www.cnblogs.com/luyuqiang/p/translate-what-is-the-concept-of-service-container-in-laravel.html