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:
@Provideswird verwendet, um Instanzen von Objekten zu erstellen, die oft komplexere Logik oder Abhängigkeiten erfordern.@Bindswird verwendet, um abstrakte Typen (Schnittstellen) mit ihren konkreten Implementierungen zu verbinden, was effizienter ist, wenn keine komplexe Logik bei der Erstellung erforderlich ist.