Sobes.tech
Middle+

Beszélj a Dagger @Provides és @Binds annotációkról

sobes.tech MI

Válasz az MI-től

A @Provides annotációt modulokban használják arra, hogy módszereket határozzanak meg, amelyek függőségi példányokat hoznak létre. Ezek a módszerek @Provides-szel vannak ellátva, és visszaadják az általuk biztosított függőségtípust. A módszer törzsében található a példány létrehozásának logikája.

@Module
class AppModule {

    @Provides
    fun provideDatabase(context: Context): AppDatabase {
        // Adatbázis létrehozási logika
        return Room.databaseBuilder(context, AppDatabase::class.java, "app-database").build()
    }
}

A @Binds annotáció modulokban arra szolgál, hogy jelezze, egy interfész egy konkrét megvalósításhoz van kötve. Ez absztrakt módszerekre alkalmazható, amelyek a megvalósítást paraméterként veszik át, és az interfészt adják vissza. A Dagger hatékonyabb kódot generál a @Binds-hez képest, mivel nem szükséges metódushívás a példány létrehozásához.

@Module
interface AppBindsModule {

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

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

Fő különbségek:

  • A @Provides objektumpéldányokat hoz létre, gyakran összetettebb logikával vagy függőségekkel.
  • A @Binds absztrakt típusokat (interfészeket) köt össze konkrét megvalósításukkal, ami hatékonyabb, ha nincs összetett létrehozási logika.