Sobes.tech
Junior — Middle

Wat is het verschil tussen het mechanisme Binds en Provides in de context van dependency injection of modulaire systemen?

sobes.tech AI

Antwoord van AI

In de context van dependency injection (bijvoorbeeld Dagger in Android) dienen de annotaties @Provides en @Binds voor verschillende doeleinden, hoewel beide worden gebruikt om afhankelijkheden te leveren.

  • @Provides wordt gebruikt voor methoden die een concreet exemplaar van een object creëren en teruggeven. Dit is meestal een methode met een lichaam waarin je de logica voor het creëren van het object kunt schrijven.

  • @Binds wordt toegepast om een interface te koppelen aan de implementatie ervan zonder een nieuw exemplaar te maken. De methode met @Binds moet abstract zijn en eenvoudigweg de implementatie van de interface teruggeven die als parameter wordt doorgegeven.

Voorbeeld:

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

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

Dus, @Binds is efficiënter en eenvoudiger wanneer je alleen wilt aangeven dat een interface wordt geïmplementeerd door een specifieke klasse, terwijl @Provides wordt gebruikt wanneer er logica nodig is voor het creëren van het object.