Как сделать так, чтобы Dagger автоматически затянул объект

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

Ответ

Для автоматического внедрения зависимостей через Dagger используйте аннотации:

  1. @Inject - помечайте конструктор класса, который должен быть внедрен:
class MyRepository @Inject constructor() { ... }
  1. В модуле провайдите зависимости:
@Module
class AppModule {
    @Provides
    fun provideRepository(): MyRepository = MyRepository()
}
  1. В месте, где нужна зависимость, также используйте @Inject:
class MyViewModel @Inject constructor(
    private val repository: MyRepository
) { ... }

Dagger автоматически найдет и внедрит зависимости при условии:

  • Класс присутствует в графе зависимостей (через модуль или конструктор)
  • Компонент правильно сконфигурирован и построен
  • Внедрение происходит через Dagger-сгенерированный код