Middle+
Реци о Dagger @Provides и @Binds анотацијама
sobes.tech АИ
Одговор од АИ
Annotacija @Provides koristi se u modulima za definisanje metoda koji kreiraju instance zavisnosti. Ovi metodi su označeni sa @Provides i vraćaju tip zavisnosti koju obezbeđuju. U telu metode nalazi se logika za kreiranje instance.
@Module
class AppModule {
@Provides
fun provideDatabase(context: Context): AppDatabase {
// Logika kreiranja baze podataka
return Room.databaseBuilder(context, AppDatabase::class.java, "app-database").build()
}
}
Anotacija @Binds koristi se u modulima da označi da je jedna interfejs povezan sa konkretnom implementacijom. Primjenjuje se na apstraktne metode koje primaju implementaciju kao parametar i vraćaju interfejs. Dagger generiše efikasniji kod za @Binds u poređenju sa @Provides, jer nije potrebna poziv metode za kreiranje instance.
@Module
interface AppBindsModule {
@Binds
fun bindRepository(impl: DefaultRepository): Repository
}
interface Repository { /* ... */ }
class DefaultRepository @Inject constructor(): Repository { /* ... */ }
Glavne razlike:
@Providesse koristi za kreiranje instanci objekata, često zahtevaju složeniju logiku ili zavisnosti.@Bindsse koristi za povezivanje apstraktnih tipova (interfejsa) sa njihovim konkretnim implementacijama, što je efikasnije kada nema složene logike kreiranja.