Sobes.tech
Junior — Middle

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.

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

  • @Binds wird verwendet, um eine Schnittstelle mit ihrer Implementierung zu verbinden, ohne eine neue Instanz zu erstellen. Die Methode mit @Binds muss 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.