[英]Laravel 5 target is not instantiable
已经有很多关于这个主题的问题了,但是我仍然遇到这个问题而且我不知道问题是什么。
我想实现我可以实例化一个接口而不是一个实现。
我正在使用Laravel 5,这是代码/结构:
在应用程序中,我创建了一个Contracts文件夹。 在这个文件夹中我有Messenger.php:
Messenger.php
<?php namespace App\Contracts;
interface Messenger {
public function goodmorning($name);
}
在app / Services我有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文档,但我错过了什么? 提前致谢 :-)
看起来你绑定时拼写错误的命名空间,使用App \\ Contacts而不是App \\ Contracts。 应该:
$this->app->bind('App\Contracts\Messenger', 'App\Services\DailyMessenger');
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.