Laravel 5 アプリケーション内で、次のようにサービス プロバイダーのインターフェイスのコンテキスト バインディングを登録しました。
$this->app->when('App\Http\Controllers\MyController')
->needs('App\Contracts\MyRepositoryInterface')
->give('App\Repositories\MyRepostory');
controller の内部には、次のように挿入しようとしているメソッドがありますMyController
。index()
MyRepositoryInterface
public function index(App\Contracts\MyRepositoryInterface $repo)
{
// Stuff
}
問題は、上記が機能せず、次のエラーが発生することです。
Container.php 行 754 の BindingResolutionException:
ターゲット [App\Contracts\MyRepositoryInterface] はインスタンス化できません。
ただし、コンテキスト バインディングを次のような通常のバインディングに変更すると、機能します。
$this->app->bind(
'App\Contracts\MyRepositoryInterface',
'App\Repositories\MyRepository'
);
私が気付いたもう 1 つのことは、次のように、コントローラーのコンストラクター メソッドに対して同じコンテキスト バインディングが正常に機能することです。
public function __constructor(App\Contracts\MyRepositoryInterface $repo)
{
// Stuff
}
メソッド (コンストラクターを除く) のインジェクションでは、コンテキスト バインディングはサポートされていないのでしょうか。それとも、これはまだ進行中の作業であり、Laravel 5 がリリースされたらサポートされる予定ですか?
それとも、私は何かひどく間違ったことをしていますか?
私はこれについて髪を引っ張っているので、どんなアドバイスも大歓迎です!