Php Laravel 6-构造函数中实现的绑定数组

Php Laravel 6-构造函数中实现的绑定数组,php,laravel,dependency-injection,laravel-6,Php,Laravel,Dependency Injection,Laravel 6,我试图将某个接口的一系列实现注入订户类 这是我的服务提供商中的代码: $this->app->tag([TrackerServiceOne::class, TrackerServiceTwo::class], 'trackers'); $this->app->bind(EventSubscriber::class, function ($app) { return new EventSubscriber($this->app->tagged('trac

我试图将某个接口的一系列实现注入订户类

这是我的服务提供商中的代码:

$this->app->tag([TrackerServiceOne::class, TrackerServiceTwo::class], 'trackers');
$this->app->bind(EventSubscriber::class, function ($app) {
    return new EventSubscriber($this->app->tagged('trackers'));
});
这是我的
EventSubscriber
类中的构造函数:

public function __construct(array $trackers)
{
    $this->trackers = $trackers;
}
这就是我得到的错误:

Unresolvable dependency resolving [Parameter #0 [ <required> array $trackers ]] in class Path\To\EventSubscriber
无法解析的依赖项解析[参数#0[数组$trackers]]在类Path\To\EventSubscriber中

尝试从服务容器中使用
makeWith
解析
EventSubscriber
,而不是实例化
新的
实例:

$this->app->bind(EventSubscriber::class, function ($app) {
    return $app->makeWith(EventSubscriber::class, [
        'trackers' => $this->app->tagged('trackers')
    ]);
});
这将正确地将
$trackers
参数注入EventSubscriber的构造函数中

从:

如果类的某些依赖项无法通过容器解析,则可以通过将它们作为关联数组传递到makeWith方法来注入它们:

$api=$this->app->makeWith('HelpSpot\api',['id'=>1])


更新

在使用Laravel 6之后,我成功地实现了这一点,尽管与文档中描述的不完全一样:

app()->bind('TrackerServiceOne', function () {
  return new TrackerServiceOne();
});

app()->bind('TrackerServiceTwo', function () {
  return new TrackerServiceTwo();
});

app()->tag([
  'TrackerServiceOne', 
  'TrackerServiceTwo'
], 'trackers');

app()->bind(EventSubscriber::class, function () {
  $trackers = [];

  foreach (app()->tagged('trackers') as $tracker) {
    $trackers[] = $tracker;
  }

  return new EventSubscriber($trackers);
});

$subscriber = resolve(EventSubscriber::class);

dd($subscriber->getTrackers());

谢谢您的回答!这种方法仍然会出现同样的错误。@GermánMedaglia看一下更新的答案,通过一些L6文档中没有的调整使其正常工作。再次感谢,伙计。不幸的是,我使用的是PHP7.3,该语法引发了以下错误:
语法错误,意外的“…”(T_省略号),预期的是“]”
我想从7.4开始就可以使用该语法。我尝试了其他选择,但没有成功。@GermaánMedaglia您能再次尝试运行我的代码吗?我做了另一个更改以删除扩展运算符。