Sobes.tech
Middle+

Pastāsti par Dagger @Provides un @Binds anotācijām

sobes.tech AI

Atbilde no AI

Zīme @Provides tiek modulī, tiek metodā tiek izmantota, lai definētu metodes, kas izveido atkarību piemērus. Šīs metodes ir atzīmētas ar @Provides un atgriež atkarības tipu, ko tās nodrošina. Metodes ķermenī ir iekļauta loģika, kas izveido piemēru.

@Module
class AppModule {

    @Provides
    fun provideDatabase(context: Context): AppDatabase {
        // Datubāzes izveides loģika
        return Room.databaseBuilder(context, AppDatabase::class.java, "app-database").build()
    }
}

Zīme @Binds tiek izmantota modulī, lai norādītu, ka viena saskarne ir saistīta ar konkrētu realizāciju. Tā tiek piemērota abstraktām metodēm, kas pieņem realizāciju kā parametru un atgriež saskarni. Dagger ģenerē efektīvāku kodu @Binds salīdzinājumā ar @Provides, jo nav nepieciešams izsaukt metodi, lai izveidotu piemēru.

@Module
interface AppBindsModule {

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

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

Galvenās atšķirības:

  • @Provides tiek izmantots objektu piemēru izveidei, bieži ar sarežģītāku loģiku vai atkarībām.
  • @Binds tiek izmantots abstraktu tipu (saskarnes) saistīšanai ar to konkrētajām realizācijām, kas ir efektīvāk, ja nav sarežģītas izveides loģikas.