Когда стоит использовать Provides в Dagger

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

Ответ

@Provides используется в Dagger для указания способа создания объекта, когда:

  1. Объект нельзя создать через @Inject (например, интерфейсы или сторонние библиотеки).
  2. Требуется кастомизация создания (например, конфигурация Retrofit или OkHttpClient).
  3. Зависимость требует runtime-аргументов (через @BindsInstance или параметры в модуле).

Пример:

@Module
class NetworkModule {
    @Provides
    fun provideOkHttpClient(): OkHttpClient {
        return OkHttpClient.Builder()
            .connectTimeout(30, TimeUnit.SECONDS)
            .build()
    }
}

⚠️ Если можно использовать @Inject или @Binds (для интерфейсов), лучше выбрать их — код будет чище.