Sobes.tech
Middle+

Pasakok apie Dagger @Provides ir @Binds anotacijas

sobes.tech AI

Atsakymas iš AI

Žymuo @Provides naudojamas moduliuose apibrėžti metodus, kurie kuria priklausomybių pavyzdžius. Šie metodai pažymėti @Provides ir grąžina teikiamos priklausomybės tipą. Metodų kūne yra logika, skirta sukurti pavyzdį.

@Module
class AppModule {

    @Provides
    fun provideDatabase(context: Context): AppDatabase {
        // Duomenų bazės kūrimo logika
        return Room.databaseBuilder(context, AppDatabase::class.java, "app-database").build()
    }
}

Žymuo @Binds naudojamas moduliuose nurodyti, kad viena sąsaja yra susieta su konkrečia įgyvendinimu. Jis taikomas abstrakčioms metodams, kurie priima įgyvendinimą kaip parametrą ir grąžina sąsają. Dagger generuoja efektyvesnį kodą @Binds nei @Provides, nes nereikia iškviesti metodo, kad būtų sukurtas pavyzdys.

@Module
interface AppBindsModule {

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

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

Pagrindiniai skirtumai:

  • @Provides naudojamas objektų pavyzdžių kūrimui, dažnai su sudėtingesne logika ar priklausomybėmis.
  • @Binds naudojamas abstrakčių tipų (sąsajų) su jų konkrečiais įgyvendinimais sujungimui, kas yra efektyviau, kai nėra sudėtingos kūrimo logikos.