Sobes.tech
Middle+

Vertel over de Dagger @Provides en @Binds annotaties

sobes.tech AI

Antwoord van AI

De annotatie @Provides wordt gebruikt in modules om methoden te definiëren die afhankelijkheden creëren. Deze methoden zijn gemarkeerd met @Provides en retourneren het type afhankelijkheid dat ze leveren. In de body van de methode bevindt zich de logica voor het creëren van het exemplaar.

@Module
class AppModule {

    @Provides
    fun provideDatabase(context: Context): AppDatabase {
        // Logica voor het maken van de database
        return Room.databaseBuilder(context, AppDatabase::class.java, "app-database").build()
    }
}

De annotatie @Binds wordt gebruikt in modules om aan te geven dat een interface gekoppeld is aan een concrete implementatie. Het wordt toegepast op abstracte methoden die de implementatie als parameter nemen en de interface teruggeven. Dagger genereert efficiëntere code voor @Binds in vergelijking met @Provides, omdat er geen methodeaanroep nodig is om het exemplaar te maken.

@Module
interface AppBindsModule {

    @Binds
    fun bindRepository(impl: DefaultRepository): Repository
}

interface Repository { /* ... */ }
class DefaultRepository @Inject constructor(): Repository { /* ... */ }

Belangrijkste verschillen:

  • @Provides wordt gebruikt om objectinstanties te maken, vaak met complexere logica of afhankelijkheden.
  • @Binds wordt gebruikt om abstracte typen (interfaces) te koppelen aan hun concrete implementaties, wat efficiënter is wanneer er geen complexe logica is bij het maken.