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:
@Provideswordt gebruikt om objectinstanties te maken, vaak met complexere logica of afhankelijkheden.@Bindswordt gebruikt om abstracte typen (interfaces) te koppelen aan hun concrete implementaties, wat efficiënter is wanneer er geen complexe logica is bij het maken.