Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

466
Vistas
Injecting a CoroutineDispatcher using Koin

I was reading the data layer guide by Google and in the linked segment, they have the following snippet:

class NewsRemoteDataSource(
  private val newsApi: NewsApi,
  private val ioDispatcher: CoroutineDispatcher
) {
    /**
     * Fetches the latest news from the network and returns the result.
     * This executes on an IO-optimized thread pool, the function is main-safe.
     */
    suspend fun fetchLatestNews(): List<ArticleHeadline> =
        // Move the execution to an IO-optimized thread since the ApiService
        // doesn't support coroutines and makes synchronous requests.
        withContext(ioDispatcher) {
            newsApi.fetchLatestNews()
        }
    }
}

// Makes news-related network synchronous requests.
interface NewsApi {
    fun fetchLatestNews(): List<ArticleHeadline>
}

Injecting the NewsApi dependency using Koin is pretty straightforward, but how can I inject a CoroutineDispatcher instance using Koin? I used the search functionality on Koin's website but nothing came up. A filtered ddg search doesn't yield many results either.

over 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

Thanks to @ADM's link from the comments, I managed to use a named property as suggested here.

In my case, I first create the named property for the IO Dispatcher, then the SubjectsLocalDataSource class gets its CoroutineDispatcher dependency using the get(named("IODispatcher")) call and finally, the SubjectsRepository gets its data source dependency using the classic get() call.

SubjectsLocalDataSource declaration:

class SubjectsLocalDataSource(
    private val database: AppDatabase,
    private val ioDispatcher: CoroutineDispatcher
)

SubjectsRepository declaration:

class SubjectsRepository(private val subjectsLocalDataSource: SubjectsLocalDataSource)

and finally, in my Koin module:

single(named("IODispatcher")) {
    Dispatchers.IO
}

// Repositories
single { SubjectsRepository(get()) }

// Data sources
single { SubjectsLocalDataSource(get(), get(named("IODispatcher"))) }
over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda