Какие знаешь ограничения у аннотации Provides в Dagger

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

Ответ

Аннотация @Provides в Dagger имеет несколько ограничений:

  1. Метод должен быть abstract или static — если модуль абстрактный, метод может быть абстрактным, иначе — только статическим.
  2. Нельзя использовать параметры — если метод @Provides требует зависимость, её нужно указать через @Binds или внедрить через конструктор модуля.
  3. Нельзя использовать @Inject@Provides заменяет @Inject для предоставления зависимостей.

Пример:

@Module
abstract class AppModule {
    @Binds
    abstract fun bindRepository(impl: RepositoryImpl): Repository

    companion object {
        @Provides
        fun provideOkHttpClient(): OkHttpClient = OkHttpClient.Builder().build()
    }
}