Какая аннотация у фрагмента, чтобы все работало в Dagger

«Какая аннотация у фрагмента, чтобы все работало в Dagger» — вопрос из категории DI, который задают на 23% собеседований Android Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

@ContributesAndroidInjector - аннотация для фрагментов в Dagger. Она генерирует необходимый код для внедрения зависимостей во фрагмент.

Пример использования в модуле:

@Module
abstract class FragmentModule {
    @ContributesAndroidInjector
    abstract fun contributeMyFragment(): MyFragment
}

Ключевые моменты:

  1. Модуль должен быть абстрактным
  2. Метод должен быть абстрактным и возвращать тип фрагмента
  3. Dagger сгенерирует подкапсулу для фрагмента
  4. Фрагмент должен быть добавлен в компонент через AndroidInjection.inject(this) в onAttach()

Для работы также нужен AndroidSupportInjectionModule в компоненте.