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

  • @Provides est utilisé pour créer des instances d’objets, souvent nécessitant une logique plus complexe ou des dépendances.
  • @Binds est 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.