Middle+
Parlez des annotations Dagger @Provides et @Binds
sobes.tech IA
Réponse de l'IA
L’annotation @Provides est utilisée dans les modules pour définir des méthodes qui créent des instances de dépendances. Ces méthodes sont marquées avec @Provides et retournent le type de dépendance qu’elles fournissent. Le corps de la méthode contient la logique de création de l’instance.
@Module
class AppModule {
@Provides
fun provideDatabase(context: Context): AppDatabase {
// Logique de création de la base de données
return Room.databaseBuilder(context, AppDatabase::class.java, "app-database").build()
}
}
L’annotation @Binds est utilisée dans les modules pour indiquer qu’une interface est liée à une implémentation spécifique. Elle s’applique aux méthodes abstraites qui prennent en paramètre l’implémentation et retournent l’interface. Dagger génère un code plus efficace pour @Binds par rapport à @Provides, car il n’est pas nécessaire d’appeler une méthode pour créer l’instance.
@Module
interface AppBindsModule {
@Binds
fun bindRepository(impl: DefaultRepository): Repository
}
interface Repository { /* ... */ }
class DefaultRepository @Inject constructor(): Repository { /* ... */ }
Différence principale :
@Providesest utilisé pour créer des instances d’objets, souvent nécessitant une logique plus complexe ou des dépendances.@Bindsest utilisé pour lier des types abstraits (interfaces) à leurs implémentations concrètes, ce qui est plus efficace en l’absence de logique complexe de création.