Middle+
Разкажи за анотациите Dagger @Provides и @Binds
sobes.tech AI
Отговор от 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се използва за свързване на абстрактни типове (интерфейси) с техните конкретни реализации, което е по-ефективно, когато няма сложна логика за създаване.