Назад к вопросам
Яндекс
Junior — Middle
81
Чем отличается механизм Binds от Provides в контексте dependency injection или модульных систем?
Компании, где спрашивали
GrowFood
Viasat tech
Ответ от нейросети
sobes.tech AI
В контексте dependency injection (например, Dagger в Android) аннотации @Provides и @Binds служат для разных целей, хотя обе используются для предоставления зависимостей.
-
@Providesиспользуется для методов, которые создают и возвращают конкретный экземпляр объекта. Обычно это метод с телом, где можно написать логику создания объекта. -
@Bindsприменяется для связывания интерфейса с его реализацией без создания нового экземпляра. Метод с@Bindsдолжен быть абстрактным и просто возвращать реализацию интерфейса, переданную в параметре.
Пример:
@Module
abstract class NetworkModule {
@Binds
abstract fun bindApiService(impl: ApiServiceImpl): ApiService
}
@Module
class DatabaseModule {
@Provides
fun provideDatabase(): Database {
return DatabaseImpl()
}
}
Таким образом, @Binds эффективнее и проще, когда нужно просто указать, что интерфейс реализуется конкретным классом, а @Provides — когда нужна логика создания объекта.