【发布时间】:2015-01-21 20:46:49
【问题描述】:
在我的 Laravel 5 应用程序中,我为服务提供者中的接口注册了一个上下文绑定,如下所示:
$this->app->when('App\Http\Controllers\MyController')
->needs('App\Contracts\MyRepositoryInterface')
->give('App\Repositories\MyRepostory');
在控制器MyController 内部,我有index() 方法,我试图将MyRepositoryInterface 注入其中:
public function index(App\Contracts\MyRepositoryInterface $repo)
{
// Stuff
}
问题是,上述方法不起作用并给出此错误:
Container.php 第 754 行中的 BindingResolutionException:
目标 [App\Contracts\MyRepositoryInterface] 不可实例化。
但是,如果我将 contextual binding 更改为正常的 binding,如下所示,它可以工作:
$this->app->bind(
'App\Contracts\MyRepositoryInterface',
'App\Repositories\MyRepository'
);
我注意到的另一件事是,相同的 上下文绑定 可以很好地用于控制器的构造方法,如下所示:
public function __constructor(App\Contracts\MyRepositoryInterface $repo)
{
// Stuff
}
这让我想知道,方法(构造函数除外)注入是否不支持上下文绑定?或者这仍然是一项正在进行的工作,一旦 Laravel 5 出来就会得到支持?
还是我做错了什么?
任何建议都将不胜感激,因为我一直在努力解决这个问题!
【问题讨论】: