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.
-
@Providesest 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. -
@Bindsest appliqué pour lier une interface à sa mise en œuvre sans créer une nouvelle instance. La méthode avec@Bindsdoit ê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.