Находит неоднозначный интерфейс и задаёт явную реализацию через alias
Зачем
Зачем это нужно
Объясняет, какие классы попали под resource и какие были исключены
Убирает service locator из бизнес-кода в пользу обычного конструктора
Вопросы
Частые вопросы
Почему класс существует, но контейнер его не видит?
Он мог попасть в exclude, лежать вне сканируемого resource или не быть публичным там, где вы пытаетесь получать его вручную. Покажите конфиг и namespace. Модель проверит путь и рекомендует внедрение через конструктор, потому что публичность сервиса часто маскирует неправильную границу.
Как выбрать одну из нескольких реализаций?
Для общего выбора создайте alias интерфейса, для разных потребителей — именованные аргументы или отдельные квалифицирующие интерфейсы. Модель предложит вариант по смыслу. Условие внутри конструктора по строке окружения делает зависимость скрытой и усложняет тест, поэтому его лучше оставить в конфигурации контейнера.
Сервис создаётся один раз или на каждый запрос?
Обычные сервисы контейнера разделяются, поэтому в них нельзя хранить изменяемое состояние конкретного запроса. Контекст передают аргументом либо специальной зависимостью. Модель найдёт поле, которое переживает вызов, и вынесет его, чтобы данные одного пользователя не случайно влияли на следующего.
Рядом
Соседние страницы каталога
Дальше — весь каталог задач: поиск по названию, темы и фильтры.