Was ist der Unterschied zwischen dem Mechanismus Binds und Provides im Kontext der Dependency Injection oder modulare Systeme?
sobes.tech KI
Antwort von AI
Im Kontext der Dependency Injection (z.B. Dagger in Android) dienen die Annotations @Provides und @Binds unterschiedlichen Zwecken, obwohl beide zur Bereitstellung von Abhängigkeiten verwendet werden.
-
@Provideswird für Methoden verwendet, die eine konkrete Instanz eines Objekts erstellen und zurückgeben. Es ist in der Regel eine Methode mit Körper, in der die Logik zur Objekterstellung geschrieben werden kann. -
@Bindswird verwendet, um eine Schnittstelle mit ihrer Implementierung zu verbinden, ohne eine neue Instanz zu erstellen. Die Methode mit@Bindsmuss abstrakt sein und einfach die Implementierung der Schnittstelle zurückgeben, die als Parameter übergeben wird.
Beispiel:
@Module
abstract class NetworkModule {
@Binds
abstract fun bindApiService(impl: ApiServiceImpl): ApiService
}
@Module
class DatabaseModule {
@Provides
fun provideDatabase(): Database {
return DatabaseImpl()
}
}
Daher ist @Binds effizienter und einfacher, wenn nur angegeben werden soll, dass eine Schnittstelle von einer konkreten Klasse implementiert wird, während @Provides verwendet wird, wenn Logik zur Objekterstellung erforderlich ist.