2017-03-20 5 views
0

私はこのトピックのLaracastビデオを見てきましたが、ドキュメントも読んでいますが、ここではコアポイントを逃しています。我々は次のような構造を持っているとしましょう:Laravel Service Containerを正しく使用するには?

enter image description here

だから私は、サービスプロバイダを作成するサービスコンテナにクラスを結合して、後でそれを解決する方法を理解します。しかし、 "MyCustomClass"バインディングを "\ App \ SomeOtherClass"で置き換えなければならない場合はどうしたらよいですか?それは私がそれを参照しない場合、 "SomeOtherClass"が見つからないという例外を引き起こします。これで、「バインドされたクラスをもう一度参照する必要があるので、サービスコンテナを使用する点は何ですか?私はここで間違っていますか?

答えて

2

両方のスワップ可能クラスNamespace\Of\My\Interface\CustomInterface:classにサービスプロバイダのバインドに続いて

interface CustomInterface 
{ 
    public function greeting(); 
} 

class FirstCustomClass implements CustomInterface 
{ 
    public function greeting() 
    { 
     return 'hello world'; 
    } 
} 

class SecondCustomClass implements CustomInterface 
{ 
    public function greeting() 
    { 
     return 'hello world two'; 
    } 
} 

。に準拠して、あなたが望むどのこれまでの実装を返す。

あなたのコントローラの内部あなたがあなたに与えてしまいますこれは、あなたのインタフェースを注入依存関係すべきですデフォルトクラス。

これは、同じインタフェースを持つ別のクラスにクラスをすばやく入れ替えることができること、またはテスト時に簡単にモックすることができることを意味します。

+0

https://ibb.co/f5k4BFのように編集して動作しています。今では、 "register"メソッドでバインドされたクラスを変更するだけで、目的の出力が得られます。ありがとう。 – user3102290

関連する問題