关于这个话题,我已经问了很多问题,但是我仍然有这个问题,我不知道问题是什么。
我想实现这一点,我可以实例化一个接口,而不是一个实现。
我使用的是Laravel 5,这是代码/结构:
在应用程序中,我创建了一个Contracts文件夹。在这个文件夹中有Messenger.php:
Messenger.php
<?php namespace App\Contracts;
interface Messenger {
public function goodmorning($name);
}在应用程序/服务中,我有DailyMessenger.php
<?php namespace App\Services;
use App\Contracts\Messenger;
class DailyMessenger implements Messenger {
public function goodmorning($name)
{
return 'Goodmorning '. $name;
}
}现在,我想在控制器中实例化这个接口。
public function __construct(Messenger $messenger)
{
$this->messenger = $messenger;
}现在,如果我遵循Laravel网站上的文档,我只需要在服务容器中注册它,就可以在现有的AppServiceProvider.php中注册。
public function register()
{
$this->app->bind(
'Illuminate\Contracts\Auth\Registrar',
'App\Services\Registrar'
);
$this->app->bind('App\Contacts\Messenger', 'App\Services\DailyMessenger');
}如果我访问映射到控制器的适当路由,就会得到错误:
BindingResolutionException in Container.php line 785:
Target [App\Contracts\Messenger] is not instantiable.我想我已经准确地跟踪了Laravel的文档,但是我遗漏了什么呢?预先多谢:-)
发布于 2015-04-02 17:36:23
看起来您在绑定时拼错了名称空间,使用App\Contact而不是App\Contracts。应:
$this->app->bind('App\Contracts\Messenger', 'App\Services\DailyMessenger');https://stackoverflow.com/questions/29409353
复制相似问题