Ваша привязка должна быть у поставщика услуг.Промежуточное программное обеспечение, которое у вас есть, не запускается до тех пор, пока не будет создан экземпляр этого контроллера.На данный момент нет контейнера, привязанного к контейнеру.Привязка слишком поздняя в жизненном цикле, чтобы иметь возможность быть там для контроллера, которому направляется маршрут.
Laravel создает экземпляр контроллера, прежде чем он запустит промежуточное ПО маршрута.Это необходимо сделать, чтобы иметь возможность собрать промежуточное программное обеспечение, которое контроллер может определить в своем конструкторе для построения стека промежуточного программного обеспечения.
Обновление:
Некоторые Возможные обходные пути (не тестировались) без рефакторинга:
1) Использование внедрения метода вместо попытки получить экземпляр в конструкторе:
public function show(Factureaza $factureaza, ...)
2) Использование замыканияпромежуточное программное обеспечение, определенное в конструкторе контроллера, чтобы получить экземпляр и назначить его.
public function __construct()
{
$this->middleware(function ($request, $next) {
$this->api = resolve(Factureaza::class);
return $next($request);
});
}
Надеемся, что промежуточное программное обеспечение, которое устанавливает информацию, необходимую для синглтона, работало до этого промежуточного программного обеспечения контроллера.
3) Установите промежуточное ПО для установки этого API на контроллере для вас ... потребуется добавить метод к контроллерам для получения этой информации.У вас есть доступ к контроллеру для маршрута, так как он уже создан и назначен для маршрута.
$request->route()->getController()->setApi(...);