Назад к вопросам
Junior — Middle
85
В чем разница между аннотациями Binds и Provides в Dagger и когда лучше использовать каждую из них?
Ответ от нейросети
sobes.tech AI
В 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");
}
}