Как отладить ошибки внедрения зависимостей в Extbase? - PullRequest
2 голосов
/ 21 марта 2012

Я создаю расширение в Extbase (последняя версия, последняя версия typo3) и в мои модели вводятся репозитории.

Это просто не работает. Нет ошибок, нет улик, ничего. Метод inject * просто не вызывается. Точно такая же инъекция работает в контроллере.

Можно ли внедрить репозитории в модели в Extbase? В общем, впрыск в модели возможен начиная с 1.4.

Как я могу отладить это? Где мне искать?

Ответы [ 2 ]

2 голосов
/ 28 апреля 2015

Это распространенное заблуждение:

Не каждый класс, который вы используете в TYPO3 CMS, использует внедрение зависимостей по умолчанию - и это хорошо.

Что верно, так это то, что каждый объект, экземпляр которого был создан ObjectManager, может извлечь из этого пользу.

Короче говоря: если вы new Thing() какой-то объект, он не получит выгоду от внедрения зависимости. Если вы используете ObjectManager, чтобы получить экземпляр чего-либо, весь ваш опыт внедрения зависимостей будет падать на ваш новый экземпляр:

Обратите внимание, что объектный администратор создает экземпляры внедренных объектов, так что рекурсия возможна, если для инъекций ServiceA требуется ввод ServiceB.

Синглеты также возможны, если вы реализуете интерфейс маркера SingletonInterface.

1 голос
/ 21 марта 2012

Внедрение зависимостей работает только если вы получаете экземпляр объекта через ObjectManager. Если вы используете хороший старый

t3lib_div::makeInstance('Tx_yourextension_domain_model_thing')

метод inject * не вызывается.

Есть немецкая запись в блоге , объясняющая, как это работает.

...