Koin + Android

Después leer muchas reviews acerca de Koin, su buena reputación me llevó a probarlo y a comenzar a tenerlo en cuenta en futuros proyectos en reemplazo del viejo y querido Dagger.

Antes que nada, decir que me pareció mucho más sencillo entenderlo que Dagger, con esto no digo nada nuevo pero lo digo para alentar a aquellos que están comenzando con la inyección de dependencias en Android y están decidiendo qué estrategia seguir, sin dudas los animo a que le den una oportunidad a Koin.

Ahora si, let’s begin:

Primero que todo agregar las dependencias a nuestro proyecto:

// Add Jcenter to your repositories if needed
repositories {
    jcenter()    
}
dependencies {
    // Koin for Android
    compile 'org.koin:koin-android:$koin_version
}

Nuestro primer módulo:

En este ejemplo que recién comienzo, tengo una estructura de paquetes así:

Tengo un archivo Modules.kt donde definiré los módulos necesarios para nuestra app. A su vez cada módulo se encargará de proveer los objetos que necesitemos.

Modules.kt

En este ejemplo tengo el módulo viewModelModule que nos proveerá de los ViewModel que necesitemos. En el ejemplo sólo tenemos uno, DashboardViewModel (Sin parámetros, luego veremos como agregarle parámetros también)

 

Ahora que tenemos un módulo, comencemos con Koin. Voy a crear la clase BaseApplication que hereda de Application (no hay que olvidarse de agregarla al manifest.xml).

Manifest:

<application 
     android:name=".BaseApplication"
......

Hecho esto, ya podemos inyectar en nuestro Activity o Fragmento el ViewModel declarado en nuestro módulo.

Como vemos en:

private val dashboardViewModel by inject<DashboardViewModel>()
  • La función by inject() nos permite recuperar instancias de Koin en tiempo de ejecución de componentes de Android (Actividad, fragmento, Servicio …)
  • La función get()nos dará directamente una instancia (no lazy)

Write A Comment