Sobes.tech
Junior — Middle

Asılılıq injeksiyası və ya modul sistemləri kontekstində Binds və Provides mexanizmləri arasındakı fərq nədir?

sobes.tech Süni İntellekt

AI-dan cavab

Asılılıq injektsiyası kontekstində (məsələn, Android-də Dagger) @Provides@Binds annotasiyaları müxtəlif məqsədlər üçün istifadə olunur, baxmayaraq ki, hər ikisi asılılıqları təmin etmək üçün istifadə olunur.

  • @Provides obyektin konkret nümunəsini yaradan və geri qaytaran metodlar üçün istifadə olunur. Adətən, bu, obyektin yaradılması loqikasını yaza biləcəyiniz bədənə malik bir metoddur.

  • @Binds interfeysi onun tətbiqi ilə əlaqələndirmək üçün istifadə olunur və yeni nümunə yaratmadan. @Binds ilə işarələnmiş metod abstrakt olmalı və sadəcə olaraq ötürülən interfeys tətbiqini geri qaytarmalıdır.

Nümunə:

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

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

Beləliklə, @Binds daha səmərəli və sadədir, sadəcə interfeysin konkret sinif tərəfindən həyata keçirildiyini göstərmək istəyirsinizsə, @Provides isə obyektin yaradılması loqikası lazım olduqda istifadə olunur.