Есть сервис из контейнера. В этом сервисе нужно сделать инстанс некоторого объекта (известен только интерфейс). Как в этом случае поступают?
В моём случае, мне нужно не готовый объект получать, а создавать инстанс на месте в результате ответа API. Я бы хотел просто настраивать контейнер, указывая инстанс какого класса обработчик должен создавать в результате ответа API.
А причём тут DI? Сделай фабрику, которая будет анализировать ответ апи и создавать нужный объект класса.
Затем, что тип объекта нужно определять не в момент обработки ответа, а заранее на уровне контейнера. Конечно, можно в контейнере прописать нужную фабрику, которая будет создавать конкретный объект, но тип-то один. Но я ищу более солидное решение.
Ничерта не понимаю Есть контейнер. Есть имя класса ли, интерфейса ли, чего угодно, по которому контейнер умеет инстанциировать объект. Что надо ещё придумать? Как выбирать имя в зависимости от входящих параметров API? Составь белый список Значение => Класс, помести его в отдельный класс-резолвер, используй в эндпоинте.
не-не-не, есть контейнер с массивом объектов))) ты видимо об этом а вот, если есть массив НЕЙМСПЕЙСОВ и при обращении к одному из них идёт создание объекта - это уже другое))) и хватит везде уже советовать этот php-di, не подходит он для частных случаев, мне нужна одна сущность для всех юзеров, например, как мне её запихать в контейнер, чтобы находясь тупо на странице одного юзера смотреть другИХ, всех юзеров запихать в контейнер? Это уже обсуждалось: контейнер для ядра, это можно по-старинке сделать реестром либо общими функциями либо просто там где надо вызвать то что надо. А просто для красоты кода - пфффф, не нужно.
Это делает весь код зависимым от реестра. Главная фишка DI - сами классы понятия не имеют, где создаются их зависимости. Через DI-контейнер, либо прямо через new на клиенте, либо ещё как-то. Они говорят: мне нужна такая-то зависимость, бери её где хочешь, но при создании меня, передай её мне. И да, никто не говорит, что в контейнер надо сувать прямо все-все-все экземпляры