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( ) โ , .
single , factory .
single factory Koin Koin. .
. , OnBoardRepository Android- . , .
Koin, API . Koin . .
1
, . CustomScope. . :
creating custom koin scope2
single factory . . :
dependencies inside custom scopes3
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()
}
}
}, . , , . , .
Koin.
Kotlin, Kotlin ( ).
Kotlin , Kotlin.
. , - . !
"Android Developer. Professional". " Gradle plugin" .