Sobes.tech
Back to questions
Junior — Middle
73

В каких случаях применение аннотации @Binds недопустимо или нецелесообразно?

Answer from AI

sobes.tech AI

Аннотация @Binds в Dagger используется для связывания интерфейса с его реализацией через абстрактный метод в модуле. Однако есть ситуации, когда её применение недопустимо или нецелесообразно:

  • Когда требуется создать объект с помощью конструктора с параметрами, а не просто связать интерфейс с конкретным классом. В этом случае лучше использовать @Provides с методом, который создает объект.
  • Если нужно выполнить дополнительную логику при создании зависимости (например, конфигурация, вычисления), @Binds не подходит, так как он просто связывает типы.
  • Когда связываемый класс не является интерфейсом или абстрактным классом, а конкретным классом без интерфейса.

@Binds работает только с абстрактными методами и требует, чтобы реализация была предоставлена через конструктор с @Inject или другим способом.

Пример, когда @Binds не подходит:

@Module
abstract class NetworkModule {
    // Нельзя использовать @Binds, если нужна логика создания
    @Provides
    fun provideRetrofit(): Retrofit {
        return Retrofit.Builder()
            .baseUrl("https://example.com")
            .build()
    }
}

В таких случаях @Provides предпочтительнее.