Estaba leyendo la guía de capa de datos de Google y en el segmento vinculado, tienen el siguiente fragmento:
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> }Inyectar la dependencia de NewsApi usando Koin es bastante sencillo, pero ¿cómo puedo inyectar una instancia de CoroutineDispatcher usando Koin? Usé la función de búsqueda en el sitio web de Koin pero no apareció nada. Una búsqueda ddg filtrada tampoco arroja muchos resultados.
Gracias al enlace de @ADM de los comentarios, logré usar una propiedad con nombre como se sugiere aquí .
En mi caso, primero creo la propiedad named para IO Dispatcher, luego la clase SubjectsLocalDataSource obtiene su dependencia de CoroutineDispatcher usando la get(named("IODispatcher")) y finalmente, SubjectsRepository obtiene su dependencia de fuente de datos usando el clásico get() llamar.
Declaración de SubjectsLocalDataSource:
class SubjectsLocalDataSource( private val database: AppDatabase, private val ioDispatcher: CoroutineDispatcher )Declaración de SubjectsRepository:
class SubjectsRepository(private val subjectsLocalDataSource: SubjectsLocalDataSource)y finalmente, en mi módulo Koin:
single(named("IODispatcher")) { Dispatchers.IO } // Repositories single { SubjectsRepository(get()) } // Data sources single { SubjectsLocalDataSource(get(), get(named("IODispatcher"))) }