Sobes.tech
Junior — Middle

Механизми Binds ва Provides дар контексти injection-и dependency ё системҳои модулӣ чӣ фарқият доранд?

sobes.tech AI

Ҷавоб аз AI

Дар контексти иҳотаи вобастагӣ (масалан, Dagger дар Android) аннотацияҳои @Provides ва @Binds барои мақсадҳои гуногун хизмат мекунанд, ҳарчанд ҳарду барои таъмин намудани вобастагиро истифода мебаранд.

  • @Provides барои методҳо истифода мешавад, ки намунаи мушаххасро месозанд ва баргардонанд. Одатан, ин як метод бо бадан аст, ки дар он логикаи сохтани объект навиштан мумкин аст.

  • @Binds барои пайваст кардани интерфейс бо иҷроияаш бидуни сохтани намунаи нав истифода мешавад. Метод бо @Binds бояд абстрактӣ бошад ва танҳо иҷроияро, ки ҳамчун параметр дода шудааст, баргардонад.

Масал:

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

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

Аз ин рӯ, @Binds самараноктар ва соддатар аст, вақте ки танҳо нишон додан лозим аст, ки интерфейс аз ҷониби синфи мушаххас иҷро мешавад, дар ҳоле ки @Provides вақте истифода мешавад, ки логикаи сохтани объект зарур аст.