Sobes.tech
Middle+

Rozprávaj o anotáciách Dagger @Provides a @Binds

sobes.tech AI

Odpoveď od AI

Anotácia @Provides sa používa v moduloch na definovanie metód, ktoré vytvárajú inštancie závislostí. Tieto metódy sú označené @Provides a vracajú typ závislosti, ktorú poskytujú. V tele metódy sa nachádza logika na vytvorenie inštancie.

@Module
class AppModule {

    @Provides
    fun provideDatabase(context: Context): AppDatabase {
        // Logika na vytvorenie databázy
        return Room.databaseBuilder(context, AppDatabase::class.java, "app-database").build()
    }
}

Anotácia @Binds sa používa v moduloch na označenie, že jedna rozhranie je spojená s konkrétnou implementáciou. Používa sa na abstraktných metódach, ktoré prijímajú implementáciu ako parameter a vracajú rozhranie. Dagger generuje efektívnejší kód pre @Binds v porovnaní s @Provides, pretože nie je potrebné volať metódu na vytvorenie inštancie.

@Module
interface AppBindsModule {

    @Binds
    fun bindRepository(impl: DefaultRepository): Repository
}

interface Repository { /* ... */ }
class DefaultRepository @Inject constructor(): Repository { /* ... */ }

Hlavné rozdiely:

  • @Provides sa používa na vytváranie inštancií objektov, často vyžadujúcich zložitejšiu logiku alebo závislosti.
  • @Binds sa používa na prepojenie abstraktných typov (rozhraní) s ich konkrétnymi implementáciami, čo je efektívnejšie, keď nie je zložitá logika tvorby.