Cómo administrar la inyección de dependencia con un mecanismo de alcance de tiempo
Para los futuros alumnos del curso "Desarrollador de Android. Profesional" preparó una traducción de un artículo útil.
También lo invitamos a participar en el seminario web abierto sobre el tema "Escribir un complemento de Gradle".
De qué se trata este artículo
Aprenderá a utilizar los módulos Koin para limitar la supervivencia de las dependencias específicas de los componentes. También aprenderá sobre los ámbitos estándar de Koin y cómo trabajar con ámbitos personalizados.
Introducción
Los desarrolladores de Android no recomiendan usar Dependency Injection (DI) si su aplicación tiene tres o menos pantallas. Pero si hay más, es mejor usar DI.
Una forma popular de implementar DI en aplicaciones de Android se basa en el marco Dagger. Pero requiere un estudio profundo. Una de las mejores alternativas a este marco es Koin, una biblioteca escrita en Kotlin puro.
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" .