#laravel #dependency-injection #service
#laravel #внедрение зависимостей #Обслуживание
Вопрос:
Я пытаюсь внедрить службу (репозиторий моделей) в другую службу (когда я размещаю логику контроллера).
Я хотел бы внедрить его с помощью reflection, но я получил сообщение об ошибке:
class UserService
{
private $repository;
public function __construct(UserRepository $repository)
{
$this->repository = $repository;
}
Ошибка:
Слишком мало аргументов для функции App Services UserService::__construct(), 0 передано в …/app/Providers/UserServiceProvider.php в строке 18 и ровно 1 ожидаемый
Я нашел этот способ внедрения, но я бы предпочел сделать это с помощью reflection:
private $repository;
public function __construct()
{
$this->repository = app(UserRepository::class);
}
Есть какой-нибудь элегантный способ сделать это лучше без использования контейнера службы?
Комментарии:
1.
app(UserService::class)
должен автоматически вводить зависимости, которые он может. Если это вызывает ошибку, тогда поделитесь ошибкой2. Я знаю, но я не хочу вводить службу таким образом…
3. Не пытайтесь реализовать свою собственную функцию внедрения зависимостей. Используйте существующий, например, тот, который предлагает Laravel, или другой сторонний. Может показаться простым создать свой собственный, но это очень быстро усложнится.
4. Спасибо @apokryfos, я не хочу реализовывать свою собственную функцию, я хочу использовать встроенную систему отражения laravel… Но, похоже, это невозможно внутри самих сервисов…
5.
app(...)
использует отражение для внедрения зависимостей. Я не уверен, что понимаю, в чем проблема?