Выбор ответа Middle DI: Hilt и Koin спрашивают часто обновлено
Внедрение без аннотации скоупа
Вопрос
Класс class Formatter @Inject constructor() без аннотации скоупа внедряется в два места. Сколько будет экземпляров?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: Два: без скоупа при каждом внедрении создаётся новый. В Dagger и Hilt без аннотации скоупа объект создаётся заново при каждом запросе.
Варианты ответа
- Один: Hilt по умолчанию делает все объекты синглтонами
- Два: без скоупа при каждом внедрении создаётся новыйправильный ответ
- Один на Activity, потому что внедрение идёт в её граф
- Ошибка компиляции: для
@Injectнужен явный скоуп
Разбор
В Dagger и Hilt без аннотации скоупа объект создаётся заново при каждом запросе. Скоуп (@Singleton, @ActivityScoped, @ViewModelScoped) делает объект единственным в пределах компонента. Ошибки компиляции нет, скоуп необязателен, и для лёгких объектов без состояния его часто специально не ставят.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.