Sobes.tech
Junior — Middle

Ի՞նչ տարբերություն կա Binds և Provides մեխանիզմների միջև dependency injection կամ մոդուլային համակարգերի համատեքստում։

sobes.tech AI

Պատասխան AI-ից

Ավելի կոնտեքստում (օրինակ՝ Android-ում Dagger-ով) @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 օգտագործվում է, երբ անհրաժեշտ է տրամաբանություն օբյեկտի ստեղծման համար։