Sobes.tech
Middle+

Erzählen Sie von den Dagger-Annotationen @Provides und @Binds

sobes.tech KI

Antwort von AI

Die Annotation @Provides wird in Modulen verwendet, um Methoden zu definieren, die Instanzen von Abhängigkeiten erstellen. Diese Methoden sind mit @Provides gekennzeichnet und geben den Typ der Abhängigkeit zurück, die sie bereitstellen. Im Methodenkörper befindet sich die Logik zur Erstellung der Instanz.

@Module
class AppModule {

    @Provides
    fun provideDatabase(context: Context): AppDatabase {
        // Logik zur Erstellung der Datenbank
        return Room.databaseBuilder(context, AppDatabase::class.java, "app-database").build()
    }
}

Die Annotation @Binds wird in Modulen verwendet, um anzugeben, dass eine Schnittstelle mit einer konkreten Implementierung verbunden ist. Sie wird auf abstrakte Methoden angewendet, die die Implementierung als Parameter nehmen und die Schnittstelle zurückgeben. Dagger generiert effizienteren Code für @Binds im Vergleich zu @Provides, da kein Methodenaufruf zur Instanzerstellung erforderlich ist.

@Module
interface AppBindsModule {

    @Binds
    fun bindRepository(impl: DefaultRepository): Repository
}

interface Repository { /* ... */ }
class DefaultRepository @Inject constructor(): Repository { /* ... */ }

Hauptunterschied:

  • @Provides wird verwendet, um Instanzen von Objekten zu erstellen, die oft komplexere Logik oder Abhängigkeiten erfordern.
  • @Binds wird verwendet, um abstrakte Typen (Schnittstellen) mit ihren konkreten Implementierungen zu verbinden, was effizienter ist, wenn keine komplexe Logik bei der Erstellung erforderlich ist.