Надо ли указывать фрагмент Dagger’у что мы собираемся что-то инжектить

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

Ответ

Да, в Dagger 2 необходимо явно указать, что фрагмент (или другой компонент) собирается использовать внедрение зависимостей. Для этого нужно:

  1. Добавить аннотацию @Inject к полям, которые нужно инжектить
  2. Вызвать AndroidInjection.inject(this) в onCreate() фрагмента

Пример:

class MyFragment : Fragment() {
    @Inject lateinit var myDependency: MyDependency

    override fun onCreate(savedInstanceState: Bundle?) {
        AndroidInjection.inject(this)
        super.onCreate(savedInstanceState)
    }
}

Для работы с фрагментами через Dagger Android нужно:

  • Настроить AndroidInjector для фрагмента
  • Унаследовать DaggerFragment или реализовать HasAndroidInjector