Middle+
Räägi Dagger @Provides ja @Binds annotatsioonidest
sobes.tech AI
Vastus AI-lt
Märk @Provides kasutatakse moodulites meetodite määratlemiseks, mis loovad sõltuvuste näidised. Need meetodid on märgitud @Provides ja tagastavad sõltuvuse tüübi, mida nad pakuvad. Meetodi kehas on loogika näidise loomiseks.
@Module
class AppModule {
@Provides
fun provideDatabase(context: Context): AppDatabase {
// Andmebaasi loomise loogika
return Room.databaseBuilder(context, AppDatabase::class.java, "app-database").build()
}
}
@Binds märgistus kasutatakse moodulites selleks, et näidata, et üks liides on seotud konkreetse teostusega. Seda rakendatakse abstraktsetele meetoditele, mis võtavad parameetrina teostuse ja tagastavad liidese. Dagger genereerib tõhusama koodi @Binds jaoks võrreldes @Provides-ga, kuna näidise loomiseks ei ole vaja meetodit kutsuda.
@Module
interface AppBindsModule {
@Binds
fun bindRepository(impl: DefaultRepository): Repository
}
interface Repository { /* ... */ }
class DefaultRepository @Inject constructor(): Repository { /* ... */ }
Peamised erinevused:
@Provideskasutatakse objektinäidiste loomiseks, sageli keerukama loogika või sõltuvustega.@Bindskasutatakse abstraktsete tüüpide (liideste) ühendamiseks nende konkreetsete teostustega, mis on tõhusam, kui loomise keerukus puudub.