【发布时间】:2018-07-18 11:02:23
【问题描述】:
我遇到了一个问题,我有一个自定义类 app/TicketFetcher,被注入到 App\Console\Commands/TicketFetch 类的构造函数中,但我不确定如何注入 TicketFetcher 的特定实例,其中它接受构造函数参数,没有错误。
这些类的实例化似乎由 Laravel 的服务容器处理,因为当 TicketFetcher 的构造函数没有参数时,它会自动注入我的自定义类的实例。有争论就会出现问题。
设置:
class TicketFetch extends Command
{
// $ticketFetcher injected automatically
public function __construct(TicketFetcher $ticketFetcher)
}
class TicketFetcher
{
public function __construct(integer $var1, string $var2...) {
}
如你所见,我需要为TicketFetcher构造一些初始化变量,所以我将TicketFetcher绑定在AppServiceProvider中。
Unresolvable dependency resolving [Parameter #0 [ <required> string $var1 ]] in class App\TicketFetcher
class AppServiceProvider extends ServiceProvider
{
public function register()
{
// Also tried $this->app->instance() and
// $this->app->when('\App\TicketFetcher')->needs(...)->give(...)
$this->app->bind(
'\App\TicketFetcher',
new \App\TicketFetcher('some value')
);
}
}
我让some value 传递到TicketFetcher 的构造函数,但仍然出现错误。
Unresolvable dependency resolving [Parameter #0 [ <required> string $var1 ]] in class App\TicketFetcher
如何正确绑定它,以便正确创建TicketFetcher?
【问题讨论】:
-
刚刚意识到
$this->app->when('App\TicketFetcher')实际上是正确的做法。注意when().. 中没有前导斜杠!如何绑定多个原语? laravel.com/docs/5.5/container#binding -
TicketFetcher::class也可以,前提是首先通过use导入该类
标签: laravel dependency-injection ioc-container laravel-5.5