Comment gérer l'injection de dépendances avec un mécanisme de portée temporelle
Pour les futurs étudiants du cours "Développeur Android. Professionnel" a préparé une traduction d'un article utile.
Nous vous invitons également à participer au webinaire ouvert sur le thème "Ecrire un plugin Gradle"
De quoi parle l'article
Vous apprendrez à utiliser les modules Koin pour limiter la survie des dépendances spécifiques aux composants. Vous découvrirez également les étendues Koin standard et comment travailler avec des étendues personnalisées.
introduction
Les développeurs Android ne recommandent pas d'utiliser l'injection de dépendances (DI) si votre application comporte trois écrans ou moins. Mais s'il y en a plus, il vaut mieux utiliser DI.
Un moyen populaire d'implémenter DI dans les applications Android est basé sur le framework Dagger. Mais cela nécessite une étude approfondie. L'une des meilleures alternatives à ce framework est Koin, une bibliothèque écrite en pur Kotlin.
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" .