Выбор ответа Middle Внедрение зависимостей обновлено
DI или Service Locator
Вопрос
Чем Service Locator отличается от DI через конструктор?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: Объект сам запрашивает зависимости у локатора: они скрыты в коде, а нехватка всплывает в рантайме. При DI через конструктор зависимости видны в сигнатуре, и забыть передать их нельзя.
Варианты ответа
- Объект сам запрашивает зависимости у локатора: они скрыты в коде, а нехватка всплывает в рантаймеправильный ответ
- Service Locator проверяет граф зависимостей на этапе компиляции, а DI через конструктор только при запуске
- Service Locator работает только в Kotlin и Dart, а в Swift без рефлексии он невозможен
- Это одно и то же: конструктор просто вызывает локатор неявно, отличается лишь синтаксис
Разбор
При DI через конструктор зависимости видны в сигнатуре, и забыть передать их нельзя. Локатор (Locator.resolve(Api.self)) прячет зависимости внутри методов: из сигнатуры не понять, что нужно классу, а если регистрации нет, будет крэш при запуске экрана. Koin и get_it по сути локаторы с удобным API, Dagger и Hilt проверяют граф при компиляции.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.