Koin adalah perpustakaan injeksi ketergantungan yang ditulis dalam Kotlin murni

Cara mengelola injeksi ketergantungan dengan mekanisme cakupan waktu

Untuk calon siswa kursus "Android Developer. Professional" menyiapkan terjemahan dari artikel yang bermanfaat.

Kami juga mengundang Anda untuk mengikuti webinar terbuka dengan topik "Menulis plugin Gradle"


Tentang apa artikel ini

Anda akan belajar bagaimana menggunakan modul Koin untuk membatasi kemampuan bertahan dari ketergantungan khusus komponen. Anda juga akan belajar tentang cakupan Koin standar dan cara bekerja dengan cakupan khusus.

pengantar

Pengembang Android tidak merekomendasikan penggunaan Dependency Injection (DI) jika aplikasi Anda memiliki tiga layar atau kurang. Tetapi jika lebih banyak, lebih baik menggunakan DI.

Cara populer untuk mengimplementasikan DI di aplikasi Android didasarkan pada kerangka kerja Dagger. Tapi itu membutuhkan studi yang mendalam. Salah satu alternatif terbaik untuk framework ini adalah Koin, perpustakaan yang ditulis dengan Kotlin murni.

Dagger DI, , , , (scope). , ,  โ€” . .

Koin

Koin Android. , , (ViewModel) , .

, Koin .

  • single ( ) โ€”  , ( );

  • factory ( ) โ€” , ( );

  • scoped ( ) โ€” , .

Objek tunggal.  Pabrik benda (pabrik)
(single). (factory)

single , factory .

single factory Koin Koin. .

. , OnBoardRepository Android- . , .

Koin, API . Koin . .

1

, . CustomScope. . :

creating custom koin scope

2

single factory . . :

dependencies inside custom scopes

3

Koin. , . Android-, Activity, Fragment . .

, Koin, createScope, .

val stringQualifiedScope = getKoin().createScope(    
  "ScopeNameID", named("CustomeScope"))

CustomScope , Koin , Koin. ScopeNameID โ€” , , . .

Android-, createScope getOrCreateScope. , .

4

, , . . .

val sampleClass = stringQualifiedScope.get<SampleClass>(        
qualifier = named("scopedName"))

scopedName factoryName โ€” , Koin  2.

5

, stringQualifiedScope,   sampleclass, close. , , close onDestroy. :

override fun onDestroy() {
    super.onDestroy()
    stringQualifiedScope.close()
}

Koin-Android

. , Koin. Android-, Koin , , .

Koin-Android. dependencies build.gradle :

// Koin for Android
implementation "org.koin:koin-android:$koin_version"
// Koin Android Scope features
implementation "org.koin:koin-android-scope:$koin_version"

Koin-Android

, , onDestroy Android. Koin lifecyclescope.

Koin Android. :

val androidModule = module {

    scope<SampleActivity> {
        scoped { SampleClass() }
    }
  
}

scoping dependency with android activity

lifecyclescope:

val sampleClass : SampleClass by lifecycleScope.inject()

, . :

@OnLifecycleEvent(Lifecycle.Event.ON_DESTROY)    
fun onDestroy() {
    if (event == Lifecycle.Event.ON_DESTROY) {       
        scope.close()
        }
    }
}

, . , , . , .

. , - . !


"Android Developer. Professional". " Gradle plugin" .




All Articles