如何在Laravel的app / console / Kernel中注入一个类?

时间:2017-07-09 16:36:46

标签: php laravel laravel-5 laravel-5.4

我正在尝试在app/Console/Kernel中注入一个类(存储库):

public function __construct(LocaleRepository $localeRepository)
{
    $this->_localeRepository = $localeRepository;
}

不幸的是,这不起作用,因为我收到以下错误: PHP Fatal error: Uncaught Illuminate\Contracts\Container\BindingResolutionException: Target [App\Repositories\Interfaces\LocaleRepository] is not instantiable while building [App\Console\Kernel]. in /home/cv/cus/vendor/laravel/framework/src/Illuminate/Container/Container.php:895

我可以毫无问题地在控制器中注入存储库。存储库也在服务提供商中注册:

public function register()
{
    $this->app->bind('App\Repositories\Interfaces\LocaleRepository', 'App\Repositories\Implementations\EloquentLocaleRepository');
}

是否可以在app/console/Kernel类中注入一个类?

3 个答案:

答案 0 :(得分:2)

使用app('App\Repositories\Interfaces\LocaleRepository');以接口方式获取您的界面对象,并且它可以正常工作。

答案 1 :(得分:1)

app/console/Kernel在加载应用服务提供者之前进行实例化。

所以,我认为不可能将类注入构造函数中。

但是,您可以使用方法注入。只需将存储库注入您需要的方法即可。

答案 2 :(得分:0)

我通过调用一个单独的方法在register方法的第一行注入接口来解决这个问题。

在这个单独的方法中,我有以下代码: $this->_localeRepository = $this->app->make('App\Repositories\Interfaces\LocaleRepository');