Sobes.tech
Junior — Middle

Kāda ir atšķirība starp mehānismiem Binds un Provides atkarību injekcijas vai modulāro sistēmu kontekstā?

sobes.tech AI

Atbilde no AI

Kontekstā ar atkarības injekciju (piemēram, Android ar Dagger) anotācijas @Provides un @Binds kalpo dažādiem mērķiem, lai gan abas tiek izmantotas atkarību nodrošināšanai.

  • @Provides tiek izmantots metožu gadījumā, kas izveido un atgriež konkrētu objekta piemēru. Parasti tas ir metodes ar ķermeni, kurā var rakstīt objekta izveides loģiku.

  • @Binds tiek piemērots, lai sasaistītu interfeisu ar tā realizāciju bez jauna piemēra izveides. Metode ar @Binds ir jābūt abstraktai un vienkārši jāatgriež interfeisa realizācija, kas nodota kā parametrs.

Piemērs:

@Module
abstract class NetworkModule {
    @Binds
    abstract fun bindApiService(impl: ApiServiceImpl): ApiService
}

@Module
class DatabaseModule {
    @Provides
    fun provideDatabase(): Database {
        return DatabaseImpl()
    }
}

Tādējādi, @Binds ir efektīvāks un vienkāršāks, ja nepieciešams tikai norādīt, ka interfeiss tiek īstenots ar konkrētu klasi, bet @Provides – ja nepieciešama objekta izveides loģika.