Sobes.tech
Junior — Middle

Quelle est la différence entre les annotations Binds et Provides dans Dagger et quand est-il préférable d'utiliser chacune d'elles?

sobes.tech IA

Réponse de l'IA

В Dagger аннотации @Binds и @Provides используются для указания, как создавать зависимости, но применяются в разных случаях:

  • @Provides — применяется к методам в модулях, которые содержат логику создания объекта. Можно писать любой код, создавать объект вручную, вызывать конструкторы, выполнять вычисления.

  • @Binds — используется для связывания интерфейса с конкретной реализацией. Метод с @Binds должен быть абстрактным и просто возвращать реализацию интерфейса. Это более оптимальный и лаконичный способ, когда у вас есть готовый класс с @Inject-конструктором.

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

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

Пример @Binds:

@Module
abstract class MyModule {
    @Binds
    abstract MyInterface bindMyInterface(MyImplementation impl);
}

Пример @Provides:

@Module
class MyModule {
    @Provides
    MyInterface provideMyInterface() {
        return new MyImplementation("param");
    }
}