Care este diferența dintre mecanismul Binds și Provides în contextul injecției de dependențe sau al sistemelor modulare?
sobes.tech AI
Răspuns de la AI
În contextul injecției de dependențe (de exemplu, Dagger în Android), adnotările @Provides și @Binds servesc scopuri diferite, deși ambele sunt utilizate pentru furnizarea dependențelor.
-
@Provideseste utilizat pentru metode care creează și returnează o instanță concretă a unui obiect. De obicei, este o metodă cu corp în care puteți scrie logica de creare a obiectului. -
@Bindsse aplică pentru a lega o interfață de implementarea sa fără a crea o nouă instanță. Metoda cu@Bindstrebuie să fie abstractă și să returneze pur și simplu implementarea interfeței transmise ca parametru.
Exemplu:
@Module
abstract class NetworkModule {
@Binds
abstract fun bindApiService(impl: ApiServiceImpl): ApiService
}
@Module
class DatabaseModule {
@Provides
fun provideDatabase(): Database {
return DatabaseImpl()
}
}
Prin urmare, @Binds este mai eficient și mai simplu atunci când trebuie doar să indicați că o interfață este implementată de o clasă concretă, în timp ce @Provides este utilizat atunci când este nevoie de logică pentru crearea obiectului.