Middle
Waarom zou je de annotatie @Binds gebruiken in plaats van @Provides?
sobes.tech AI
Antwoord van AI
De annotatie @Binds wordt gebruikt om Dagger aan te geven welke specifieke implementatie van een interface moet worden geleverd wanneer de interface zelf wordt opgevraagd.
De voordelen van het gebruik van @Binds in plaats van @Provides in dit geval zijn:
- Prestaties:
@Bindsis efficiënter omdat Dagger minder code genereert. Het koppelt eenvoudig de interface aan een concreet type zonder een nieuw exemplaar van de module te maken. - Leesbaarheid: De code wordt duidelijker omdat duidelijk is welke klasse welke interface implementeert.
- Vermindering van boilerplate-code: Bij gebruik van
@Bindsis het niet nodig om een extra methode met@Provideste schrijven die gewoon een instantie van de implementatie retourneert.
Voorbeeld:
In plaats van:
@Module
class MyModule {
@Provides
fun provideMyInterface(implementation: MyInterfaceImpl): MyInterface {
return implementation;
}
}
interface MyInterface {
// ...
}
class MyInterfaceImpl : MyInterface {
// ...
}
Is het beter om te gebruiken:
@Module
abstract class MyModule { // Het module moet abstract zijn
@Binds
abstract fun bindMyInterface(implementation: MyInterfaceImpl): MyInterface; // Methode moet abstract zijn
}
interface MyInterface {
// ...
}
class MyInterfaceImpl : MyInterface {
// ...
}
De @Provides-annotatie blijft nodig voor het leveren van objecten die geen implementaties van interfaces zijn of die complexere logica voor het maken van instanties vereisen (bijvoorbeeld het maken van objecten via builders, het leveren van objecten uit externe bibliotheken, het leveren van afhankelijkheden die niet via de constructor kunnen worden geïnjecteerd).