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 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()
}
}
}
, . , , . , .
Koin.
Kotlin, Kotlin ( ).
Kotlin , Kotlin.
. , - . !
"Android Developer. Professional". " Gradle plugin" .