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

  • @Provides se koristi za kreiranje instanci objekata, često zahtevaju složeniju logiku ili zavisnosti.
  • @Binds se koristi za povezivanje apstraktnih tipova (interfejsa) sa njihovim konkretnim implementacijama, što je efikasnije kada nema složene logike kreiranja.