Выбор ответа Middle DI: Hilt и Koin спрашивают часто обновлено

Внедрение без аннотации скоупа

Вопрос

Класс class Formatter @Inject constructor() без аннотации скоупа внедряется в два места. Сколько будет экземпляров?

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

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

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

Коротко

Правильный ответ: Два: без скоупа при каждом внедрении создаётся новый. В Dagger и Hilt без аннотации скоупа объект создаётся заново при каждом запросе.

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

  1. Один: Hilt по умолчанию делает все объекты синглтонами
  2. Два: без скоупа при каждом внедрении создаётся новыйправильный ответ
  3. Один на Activity, потому что внедрение идёт в её граф
  4. Ошибка компиляции: для @Inject нужен явный скоуп

Разбор

В Dagger и Hilt без аннотации скоупа объект создаётся заново при каждом запросе. Скоуп (@Singleton, @ActivityScoped, @ViewModelScoped) делает объект единственным в пределах компонента. Ошибки компиляции нет, скоуп необязателен, и для лёгких объектов без состояния его часто специально не ставят.

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

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