使用 Koin 注入 CoroutineDispatcher
Injecting a CoroutineDispatcher using Koin
我正在阅读 Google 的 data layer guide,在链接的部分中,他们有以下片段:
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>
}
使用 Koin 注入 NewsApi 依赖项非常简单,但是如何使用 Koin 注入 CoroutineDispatcher 实例?我使用了 Koin 网站上的搜索功能,但没有找到任何结果。过滤后的 ddg 搜索也不会产生很多结果。
感谢 @ADM 的 link 评论,我设法按照建议 .
使用了命名 属性
在我的例子中,我首先为 IO Dispatcher 创建命名的 属性,然后 SubjectsLocalDataSource class 使用 get(named("IODispatcher"))
调用获取其 CoroutineDispatcher 依赖项,最后,SubjectsRepository 获取它的数据源依赖使用 classic get()
调用。
SubjectsLocalDataSource 声明:
class SubjectsLocalDataSource(
private val database: AppDatabase,
private val ioDispatcher: CoroutineDispatcher
)
SubjectsRepository 声明:
class SubjectsRepository(private val subjectsLocalDataSource: SubjectsLocalDataSource)
最后,在我的 Koin 模块中:
single(named("IODispatcher")) {
Dispatchers.IO
}
// Repositories
single { SubjectsRepository(get()) }
// Data sources
single { SubjectsLocalDataSource(get(), get(named("IODispatcher"))) }
我正在阅读 Google 的 data layer guide,在链接的部分中,他们有以下片段:
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>
}
使用 Koin 注入 NewsApi 依赖项非常简单,但是如何使用 Koin 注入 CoroutineDispatcher 实例?我使用了 Koin 网站上的搜索功能,但没有找到任何结果。过滤后的 ddg 搜索也不会产生很多结果。
感谢 @ADM 的 link 评论,我设法按照建议
在我的例子中,我首先为 IO Dispatcher 创建命名的 属性,然后 SubjectsLocalDataSource class 使用 get(named("IODispatcher"))
调用获取其 CoroutineDispatcher 依赖项,最后,SubjectsRepository 获取它的数据源依赖使用 classic get()
调用。
SubjectsLocalDataSource 声明:
class SubjectsLocalDataSource(
private val database: AppDatabase,
private val ioDispatcher: CoroutineDispatcher
)
SubjectsRepository 声明:
class SubjectsRepository(private val subjectsLocalDataSource: SubjectsLocalDataSource)
最后,在我的 Koin 模块中:
single(named("IODispatcher")) {
Dispatchers.IO
}
// Repositories
single { SubjectsRepository(get()) }
// Data sources
single { SubjectsLocalDataSource(get(), get(named("IODispatcher"))) }