Sobes.tech
Junior — Middle

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.

  • @Provides este 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.

  • @Binds se aplică pentru a lega o interfață de implementarea sa fără a crea o nouă instanță. Metoda cu @Binds trebuie 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.