Работал ли с Dagger

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

Ответ

Да, работал с Dagger (Dagger 2/Hilt). Использовал его для dependency injection (DI) в Android-приложениях.

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

  • Компоненты – контейнеры для зависимостей (@Component).
  • Модули – источники объектов (@Module + @Provides).
  • Scopes – управление жизненным циклом зависимостей (@Singleton и др.).
  • Hilt – упрощённая версия Dagger для Android (автоматическая генерация компонентов).

Пример с Dagger:

@Module
class NetworkModule {
    @Provides
    fun provideRetrofit(): Retrofit = Retrofit.Builder()
        .baseUrl("https://api.example.com")
        .build()
}

@Component(modules = [NetworkModule::class])
interface AppComponent {
    fun inject(activity: MainActivity)
}

Пример с Hilt:

@Module
@InstallIn(SingletonComponent::class)
object NetworkModule {
    @Provides
    @Singleton
    fun provideRetrofit(): Retrofit = Retrofit.Builder()
        .baseUrl("https://api.example.com")
        .build()
}

@AndroidEntryPoint
class MainActivity : AppCompatActivity() { ... }

Практиковал внедрение в ViewModel, WorkManager и кастомные компоненты.