Middle+
Vorbește despre adnotările Dagger @Provides și @Binds
sobes.tech AI
Răspuns de la AI
Adnotarea @Provides este utilizată în module pentru a defini metode care creează instanțe de dependențe. Aceste metode sunt marcate cu @Provides și returnează tipul de dependență pe care îl furnizează. În corpul metodei se află logica de creare a instanței.
@Module
class AppModule {
@Provides
fun provideDatabase(context: Context): AppDatabase {
// Logica de creare a bazei de date
return Room.databaseBuilder(context, AppDatabase::class.java, "app-database").build()
}
}
Adnotarea @Binds este utilizată în module pentru a indica că o interfață este legată de o implementare concretă. Se aplică metodelor abstracte care iau ca parametru implementarea și returnează interfața. Dagger generează un cod mai eficient pentru @Binds comparativ cu @Provides, deoarece nu este necesar să se apeleze o metodă pentru a crea instanța.
@Module
interface AppBindsModule {
@Binds
fun bindRepository(impl: DefaultRepository): Repository
}
interface Repository { /* ... */ }
class DefaultRepository @Inject constructor(): Repository { /* ... */ }
Diferențele principale:
@Provideseste folosit pentru a crea instanțe de obiecte, adesea necesitând logică mai complexă sau dependențe.@Bindseste folosit pentru a lega tipuri abstracte (interfețe) de implementările lor concrete, ceea ce este mai eficient în absența logicii complexe de creare.