Sobes.tech
Back to questions
Junior — Middle
71

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

Companies where asked
NordClan
СБЕРСБЕР
Платформа Трим
trendtech

Answer from AI

sobes.tech AI

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

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

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

Рекомендации по использованию:

  • Используйте @Binds, когда нужно связать интерфейс с реализацией и объект можно создать напрямую (например, через конструктор с @Inject).
  • Используйте @Provides, когда создание объекта требует дополнительной логики, параметров или нельзя использовать конструктор с @Inject.

Пример:

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

@Module
class MyModule {
    @Provides
    MyObject provideMyObject() {
        return new MyObject("param");
    }
}