Verwalten der Abhängigkeitsinjektion mit einem Zeitbereichsmechanismus
Für zukünftige Studenten des Kurses "Android Developer. Professional" wurde eine Übersetzung eines nützlichen Artikels vorbereitet.
Wir laden Sie außerdem ein, an dem offenen Webinar zum Thema "Schreiben eines Gradle-Plugins" teilzunehmen.
Wovon handelt der Artikel
Sie lernen, wie Sie Koin-Module verwenden, um die Überlebensfähigkeit komponentenspezifischer Abhängigkeiten zu begrenzen. Außerdem erfahren Sie mehr über die Standard-Koin-Bereiche und wie Sie mit benutzerdefinierten Bereichen arbeiten.
Einführung
Android-Entwickler empfehlen die Verwendung von Dependency Injection (DI) nicht, wenn Ihre Anwendung drei oder weniger Bildschirme hat. Wenn es jedoch mehr davon gibt, ist es besser, DI zu verwenden.
Eine beliebte Methode zur Implementierung von DI in Android-Anwendungen basiert auf dem Dagger-Framework. Aber es erfordert tiefes Studium. Eine der besten Alternativen zu diesem Framework ist Koin, eine Bibliothek, die in reinem Kotlin geschrieben ist.
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" .