Middle
Miért kell az @Provides helyett az @Binds annotációt használni?
sobes.tech MI
Válasz az MI-től
A @Binds annotációt arra használják, hogy jelezzék a Dagger számára, melyik konkrét interfész megvalósítást kell biztosítania, amikor maga az interfész kerül kérésre.
A @Binds használatának előnyei a @Provides helyett ebben az esetben:
- Teljesítmény: A
@Bindshatékonyabb, mivel a Dagger kevesebb kódot generál. Egyszerűen összeköti az interfészt egy konkrét típussal anélkül, hogy új példányt hozna létre a modulból. - Átláthatóság: A kód áttekinthetőbbé válik, mivel világosan látszik, melyik osztály melyik interfészt valósítja meg.
- Boilerplate kód csökkentése: A
@Bindshasználatával nem szükséges egy extra@Providesmetódust írni, ami csak egy példányt ad vissza a megvalósításból.
Példa:
A helyett:
@Module
abstract class MyModule { // A modulnak absztraktnak kell lennie
@Binds
abstract fun bindMyInterface(implementation: MyInterfaceImpl): MyInterface; // A metódusnak absztraktnak kell lennie
}
interface MyInterface {
// ...
}
class MyInterfaceImpl : MyInterface {
// ...
}
A @Provides annotáció továbbra is szükséges az olyan objektumok biztosításához, amelyek nem interfész megvalósítások vagy összetettebb példányosítási logikát igényelnek (pl. builder-ekkel történő objektumok létrehozása, külső könyvtárakból származó objektumok biztosítása, konstruktoron keresztüli injektálhatatlan függőségek biztosítása).