2015-04-02 35 views
3

已经询问过这个主题的多个问题,但我仍然有这个问题,我不知道问题是什么。Laravel 5的目标是不可实例化的

我想实现我可以实例化一个接口而不是实现。

我使用Laravel 5,这是代码/结构:

在应用程序,我已经创建了一个合同文件夹。在此文件夹我有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文档,但我缺少什么?在此先感谢:-)

回答

3

看起来像拼写命名空间时绑定,错误使用应用程序\联系人而不是应用程序\合同。应该是:

$this->app->bind('App\Contracts\Messenger', 'App\Services\DailyMessenger'); 
相关问题