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:
@Providestiek izmantots objektu piemēru izveidei, bieži ar sarežģītāku loģiku vai atkarībām.@Bindstiek 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.