Sobes.tech
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 @Binds haté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 @Binds használatával nem szükséges egy extra @Provides metó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).