Koin es una biblioteca de inyección de dependencias escrita en Kotlin puro

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 ( ) — , .

Objeto único.  Fábrica de objetos (fábrica)
(single). (factory)

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()
        }
    }
}

, . , , . , .

. , - . !


"Android Developer. Professional". " Gradle plugin" .




All Articles