Laravel自动DI不起作用

时间:2014-12-02 20:23:48

标签: php laravel-4 dependency-injection inversion-of-control

我试图创建一个存储库并将其自动注入我的某些控制器中。我使用的是Laravel 4.1和PHP 5.3.10

我收到错误消息Class ConsumerRepositoryInterface does not exist

我已经设置了像这样的服务提供商......

use Illuminate\Support\ServiceProvider;

class ConsumerServiceProvider extends ServiceProvider {

    public function register()
    {
        $this->app->bind('ConsumerRepositoryInterface', function()
        {
            return new EloquentConsumerRepository(new Consumer);
        });
    }

}

我试图像这样将它注入我的控制器。

private $consumer;

public function __construct(ConsumerRepositoryInterface $consumer)
{
    $this->consumer = $consumer;
}

我已将服务提供商在config\app.php中的提供商数组中注册为ConsumerServiceProvider。我已将app/providersapp/repositories分别添加到composer.json文件的autoload classmap部分,并已运行composer dump-autoload

令人困惑的部分是设置我的控制器,因此工作正常......

private $consumer;

public function __construct()
{
    $this->consumer = App::make('ConsumerRepositoryInterface');
}

这告诉我服务提供者和存储库都很好,Laravel由于某种原因无法自动将我的依赖注入控制器。

1 个答案:

答案 0 :(得分:0)

答案非常明显。

有人说ConsumerRepositoryInterface不存在,因为它不存在。一旦我创建了一个实际的接口并设置了EloquentConsumerRepository来实现它,一切都有效。