2016-12-08 7 views

答えて

0

あなたはこのようなクラスにインターフェースを注入することができます

interface ConnectionInjector{ 
    public function injectConnection(Connection $con); 
} 

class UserProvider implements ConnectionInjector{ 
    protected $connection; 

    public function __construct(){ 
     ... 
    } 

    public function injectConnection(Connection $con){ 
     $this->connection = $con; 
    } 
} 

は、この情報がお役に立てば幸い!

+0

: 今、私たちは、依存関係がサービス コンテナによって注入されている他の場所をEventPusherコンストラクタのインターフェイス、または を、ヒントを入力することができます。私はクラスのインターフェイスを使用しようとしていない。私はIOCが解決する別のインターフェースを注入したい。 – panthro

-1

あなたが実装にバインディングインターフェイスの方法をしたいなら、あなたのようにあなたのApp\Providers\AppServiceProviderクラスのregister方法でそれを行うことができます:Docs

非常に強力な機能から

$this->app->bind('some\interface', 'some/class_implementation'); 

は、インタフェースを特定の実装にバインドする機能です。たとえば、EventPusherインターフェイスとRedisEventPusher実装があるとします。私たちは、このインターフェイスの私たちのRedisEventPusher実装をコード化したら、我々はそのようなサービスコンテナに登録することができます

$this->app->bind(
    'App\Contracts\EventPusher', 
    'App\Services\RedisEventPusher' 
); 

をこの文は、クラスが必要になったとき、それは RedisEventPusherを注入すべきコンテナに指示しますEventPusherの実装うーん、私はあなたが完全に質問を理解しないと思う

use App\Contracts\EventPusher; 

/** 
* Create a new class instance. 
* 
* @param EventPusher $pusher 
* @return void 
*/ 
public function __construct(EventPusher $pusher) 
{ 
    $this->pusher = $pusher; 
} 
+0

これは機能しません。コントローラでのみ動作します。 – panthro

+0

あなたの質問では、あなたは「クラス内」を求めてきましたが、コントローラーもクラスだと思います。具体的なユースケースがある場合は、私たちがあなたを助けるためにあなたの質問に答えてください。 –

+0

それでは、私のユースケースはコントローラ以外のクラスです。ご協力いただきありがとうございます。 – panthro

関連する問題