Sobes.tech
Junior — Middle

Quelle est la différence entre le mécanisme Binds et Provides dans le contexte de l'injection de dépendances ou des systèmes modulaires?

sobes.tech IA

Réponse de l'IA

Dans le contexte de l'injection de dépendances (par exemple, Dagger en Android), les annotations @Provides et @Binds ont des objectifs différents, bien qu'elles soient toutes deux utilisées pour fournir des dépendances.

  • @Provides est utilisé pour les méthodes qui créent et renvoient une instance concrète d'un objet. Il s'agit généralement d'une méthode avec un corps où vous pouvez écrire la logique de création de l'objet.

  • @Binds est appliqué pour lier une interface à sa mise en œuvre sans créer une nouvelle instance. La méthode avec @Binds doit être abstraite et simplement renvoyer l'implémentation de l'interface passée en paramètre.

Exemple :

@Module
abstract class NetworkModule {
    @Binds
    abstract fun bindApiService(impl: ApiServiceImpl): ApiService
}

@Module
class DatabaseModule {
    @Provides
    fun provideDatabase(): Database {
        return DatabaseImpl()
    }
}

Ainsi, @Binds est plus efficace et plus simple lorsque vous souhaitez simplement indiquer qu'une interface est implémentée par une classe spécifique, tandis que @Provides est utilisé lorsque la logique de création de l'objet est nécessaire.