Назад к вопросам
Middle+
157
questionbank
Расскажи про аннотации Dagger @Provides и @Binds
Sobes Copilot
Получайте ответы в реальном времени
Ответ от нейросети
sobes.tech AI
Аннотация @Provides используется в модулях для определения методов, создающих экземпляры зависимостей. Эти методы помечены @Provides и возвращают тип зависимости, которую они предоставляют. В теле метода содержится логика создания экземпляра.
@Module
class AppModule {
@Provides
fun provideDatabase(context: Context): AppDatabase {
// Логика создания базы данных
return Room.databaseBuilder(context, AppDatabase::class.java, "app-database").build()
}
}
Аннотация @Binds используется в модулях для указания, что один интерфейс связан с конкретной реализацией. Она применяется к абстрактным методам, которые принимают в качестве параметра реализацию и возвращают интерфейс. Dagger генерирует более эффективный код для @Binds по сравнению с @Provides, так как не требуется вызов метода для создания экземпляра.
@Module
interface AppBindsModule {
@Binds
fun bindRepository(impl: DefaultRepository): Repository
}
interface Repository { /* ... */ }
class DefaultRepository @Inject constructor(): Repository { /* ... */ }
Основное различие:
@Providesиспользуется для создания экземпляров объектов, часто требующих более сложной логики или зависимостей.@Bindsиспользуется для связывания абстрактных типов (интерфейсов) с их конкретными реализациями, что эффективнее при отсутствии сложной логики создания.