Мне нужно создать службу, которая использует другую фабричную службу и возвращает объекты разных типов.
Вот определения моих служб:
services:
games.search_factory:
class: %games.search_factory.class%
calls:
- [ setContainer, ["@service_container"] ]
games.search:
class: %games.search.base.class%
factory_service: games.search_factory
factory_method: get
Мой метод %games.search_factory.class%
get возвращает разные объекты в зависимости от параметров запроса.
Мой %games.search.base.class%
является абстрактным.
Моя цель - когда я вызываю
$this->get("games.search");
Я хочу получить результат фабричного метода. Но когда я запускаю код, я получаю сообщение об ошибке: FatalErrorException: Ошибка: невозможно создать экземпляр абстрактного класса.
Итак, у меня есть два вопроса:
- Почему система DI пытается создать экземпляр моего класса вместо того, чтобы возвращать результат моего фабричного метода?
- Есть ли способ реализовать то, что мне нужно (красиво и лаконично)?
Обновление: у меня была ошибка в части кода, которая здесь не показана. Помимо этих двух сервисов для поиска, у меня был сервис для каждого типа поиска, и эти сервисы я вернул с завода. Но в определении этих сервисов я использовал свой базовый класс (который является абстрактным) в качестве класса.
Хороший вывод: из фабрики можно возвращать объекты разных типов.