Sobes.tech
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:

  • @Provides kasutatakse objektinäidiste loomiseks, sageli keerukama loogika või sõltuvustega.
  • @Binds kasutatakse abstraktsete tüüpide (liideste) ühendamiseks nende konkreetsete teostustega, mis on tõhusam, kui loomise keerukus puudub.