Выбор ответа Senior DI: Hilt и Koin обновлено

Параметры, известные только в рантайме

Вопрос

ViewModel или класс требует и зависимости из графа, и параметр, известный только в момент создания (например, orderId). Какой механизм Dagger/Hilt для этого?

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

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

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

Коротко

Правильный ответ: @AssistedInject, @Assisted параметр и @AssistedFactory. Assisted injection: конструктор помечают @AssistedInject, рантайм-параметры @Assisted, и объявляют интерфейс @AssistedFactory с методом create(orderId).

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

  1. @Provides с параметром orderId в модуле экрана
  2. @Singleton с изменяемым полем orderId для текущего заказа
  3. @AssistedInject, @Assisted параметр и @AssistedFactoryправильный ответ
  4. Глобальная переменная currentOrderId в Application

Разбор

Assisted injection: конструктор помечают @AssistedInject, рантайм-параметры @Assisted, и объявляют интерфейс @AssistedFactory с методом create(orderId). Dagger сгенерирует фабрику, которая сама внедрит остальные зависимости. Для ViewModel в Hilt это делается через @HiltViewModel(assistedFactory = ...), хотя часто достаточно SavedStateHandle с аргументами навигации. Изменяемый синглтон и глобальные переменные ломают изоляцию экранов.

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

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