クラスの中で私はInterfaceを注入し、IOCにそれを解決させたいと思っています。メソッド注入 - コントローラではありませんか?
public function handle(\some\interface $foo){
$foo->bar();
}
上記は機能しません。
クラスの中で私はInterfaceを注入し、IOCにそれを解決させたいと思っています。メソッド注入 - コントローラではありませんか?
public function handle(\some\interface $foo){
$foo->bar();
}
上記は機能しません。
あなたはこのようなクラスにインターフェースを注入することができます
interface ConnectionInjector{
public function injectConnection(Connection $con);
}
class UserProvider implements ConnectionInjector{
protected $connection;
public function __construct(){
...
}
public function injectConnection(Connection $con){
$this->connection = $con;
}
}
は、この情報がお役に立てば幸い!
あなたが実装にバインディングインターフェイスの方法をしたいなら、あなたのようにあなたの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;
}
: 今、私たちは、依存関係がサービス コンテナによって注入されている他の場所を
EventPusher
コンストラクタのインターフェイス、または を、ヒントを入力することができます。私はクラスのインターフェイスを使用しようとしていない。私はIOCが解決する別のインターフェースを注入したい。 – panthro