Ответ
@Provides используется, когда нужно создать объект вручную, а @Binds — когда просто связываешь интерфейс с его реализацией.
Пример замены @Provides на @Binds:
// Было (Provides)
@Module
class AppModule {
@Provides
fun provideRepository(impl: RepositoryImpl): Repository = impl
}
// Стало (Binds) - короче и эффективнее
@Module
interface AppModule {
@Binds
fun bindRepository(impl: RepositoryImpl): Repository
}
Почему @Binds лучше:
- Не создаёт лишних объектов (просто возвращает готовый
impl). - Работает быстрее, т.к. не требует фабричного метода.
- Подходит, если зависимость уже есть в графе (например, через
@Injectконструктор).
Ограничение: @Binds можно использовать только в abstract классе или interface модуля.