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:
@Providesnaudojamas objektų pavyzdžių kūrimui, dažnai su sudėtingesne logika ar priklausomybėmis.@Bindsnaudojamas abstrakčių tipų (sąsajų) su jų konkrečiais įgyvendinimais sujungimui, kas yra efektyviau, kai nėra sudėtingos kūrimo logikos.