У меня есть поставщик услуг, который я хочу использовать для привязки экземпляра класса к контейнеру службы:
namespace App\Providers;
use Eluceo\iCal\Component\Calendar;
use Illuminate\Support\ServiceProvider;
class IcalProvider extends ServiceProvider
{
public function register()
{
$this->app->instance('iCal', function () {
return new Calendar(config('calendar.name'));
});
}
}
Насколько я понимаю документацию по привязке экземпляра, это позволяет мне привязать ключ iCal
к контейнер службы, чтобы позже в моем контроллере или классе службы я мог ввести подсказку iCal
, и будет использоваться экземпляр, созданный в поставщике услуг.
Итак, я создал контроллер и попытался ввести подсказку для своего экземпляра:
namespace App\Http\Controllers;
use App\Http\Controllers\Controller;
class CalendarInviteController extends Controller
{
public function download(iCal $ical, $sessionId)
{
dd($ical);
}
}
Но когда я это сделаю, я получаю сообщение об ошибке:
Класс App \ Http \ Controllers \ iCal не существует
Имеет смысл, поскольку он применяет поиск класса с именем iCal
в пространстве имен контроллера, которого не существует. Для этого экземпляра нет оператора использования, поскольку iCal
- это просто текстовый ключ, поэтому я попытался сказать ему, чтобы он посмотрел на корневое пространство имен, думая, что может исправить это:
public function download(\iCal $ical, $sessionId)
и я получаю сообщение об ошибке:
Класс iCal не существует
Когда я читаю раздел документации по разрешению из контейнера службы, мне кажется, что единственный то, что мне нужно сделать в контроллере, - это подсказка типа для получения экземпляра.
Я неправильно понимаю документы?
Обновлять
Я также должен упомянуть, что я добавил поставщика услуг в свой config/app.php
файл.
Кроме того, когда я создаю интерфейс, вместо этого привязываю его к контейнеру службы, редактирую код поставщика для реализации указанного интерфейса и внедряю этот интерфейс, вместо этого он работает, но для этого требуется, чтобы я отредактировал код поставщика, который мне не нужен.