Laravel 5: Как я могу получить автоматический DI через конструкторы пользовательских классов?

Документация Laravel гласит: «вы можете просто« напечатать подсказку »зависимости в конструкторе класса, который разрешается контейнером, включая контроллеры, прослушиватели событий …»

Ключевыми словами здесь являются «класс, который разрешается контейнером» — я пытался воспроизвести это с моими собственными пользовательскими классами (сервисами, репозиториями, обработчиками и т. Д.), И я не могу понять это. Контроллеры (и другие классы) разрешаются через контейнер, который обрабатывает автоматическое внедрение любых зависимостей. Увидеть https://github.com/laravel/framework/blob/master/src/Illuminate/Routing/ControllerDispatcher.php#L53

Мой вопрос заключается в том, как мне добиться такой же функциональности с моей собственной структурой классов. Это не так просто, как связать классы с IoC и разрешить их через геттеры. Мне интересно, если кто-то, возможно, настроил что-то подобное в своем приложении и хотел бы поделиться своей техникой 🙂

Это будет с благодарностью!

1

Решение

Контейнер разрешает объект диаграммы. Таким образом, вы должны иметь свой класс на графике.

Если контроллеры обрабатываются контейнером Laravel, тогда вы идете: введите ваш сервис в ваш контроллер, и Laravel будет обрабатывать его для вас.

Под «справиться за вас» я имею в виду, что это создаст & вставьте зависимости контроллера, и зависимости зависимостей, и … Это транзитивно.

Например:

  • UserController
    • UserService
      • UserRepository (или любой другой класс)

Итак, вопрос в том, куда вы хотите ввести свой класс?

  • в контроллере: Laravel справится с этим
  • в другом объекте: перейти к «где вы хотите ввести свой класс?»
  • в «корневом» объекте, который не является контроллером (например, тестовый класс, класс Command, a…): здесь вам понадобится Laravel для создания объекта. Это может быть легко или нет, я не знаю Laravel достаточно …
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]