Sobes.tech
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:

  • @Provides este folosit pentru a crea instanțe de obiecte, adesea necesitând logică mai complexă sau dependențe.
  • @Binds este 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.