gpt4 book ai didi

android - 使用 Koin 注入(inject) CoroutineDispatcher

转载 作者:行者123 更新时间:2023-12-04 23:53:53 24 4
gpt4 key购买 nike

我正在阅读 data layer guide由谷歌和链接段中,他们有以下 fragment :

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 注入(inject) NewsApi 依赖项非常简单,但是如何使用 Koin 注入(inject) CoroutineDispatcher 实例呢?我使用了 Koin 网站上的搜索功能,但没有任何结果。过滤的 ddg 搜索也不会产生很多结果。

最佳答案

感谢@ADM 评论中的链接,我设法按照建议使用了一个命名属性 here .

在我的例子中,我首先为 IO Dispatcher 创建命名属性,然后 SubjectsLocalDataSource 类使用 get(named("IODispatcher")) 调用获取其 CoroutineDispatcher 依赖项,最后是 SubjectsRepository使用经典的 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"))) }

关于android - 使用 Koin 注入(inject) CoroutineDispatcher,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70544552/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com