Выбор ответа Middle Внедрение зависимостей обновлено

DI или Service Locator

Вопрос

Чем Service Locator отличается от DI через конструктор?

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: Объект сам запрашивает зависимости у локатора: они скрыты в коде, а нехватка всплывает в рантайме. При DI через конструктор зависимости видны в сигнатуре, и забыть передать их нельзя.

Варианты ответа

  1. Объект сам запрашивает зависимости у локатора: они скрыты в коде, а нехватка всплывает в рантаймеправильный ответ
  2. Service Locator проверяет граф зависимостей на этапе компиляции, а DI через конструктор только при запуске
  3. Service Locator работает только в Kotlin и Dart, а в Swift без рефлексии он невозможен
  4. Это одно и то же: конструктор просто вызывает локатор неявно, отличается лишь синтаксис

Разбор

При DI через конструктор зависимости видны в сигнатуре, и забыть передать их нельзя. Локатор (Locator.resolve(Api.self)) прячет зависимости внутри методов: из сигнатуры не понять, что нужно классу, а если регистрации нет, будет крэш при запуске экрана. Koin и get_it по сути локаторы с удобным API, Dagger и Hilt проверяют граф при компиляции.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.