android - Hilt - CoroutineDispatcher 上缺少绑定(bind)

标签 android kotlin dependency-injection dagger-hilt

我正在使用 重构我的应用程序刀柄 作为依赖注入(inject)管理器。
我有一个构造函数可注入(inject)类,构造函数中有两个参数。其中一个参数是 CoroutineDispatcher .

class SubscriptionsLocalDataSource @Inject constructor(
    private val subscriptionsDao: SubscriptionsDao,
    private val dispatcher: CoroutineDispatcher = Dispatchers.IO
) : SubscriptionsDataSource {

}
当我尝试构建应用程序时,出现缺少绑定(bind)错误,如下所示:

error: [Dagger/MissingBinding] kotlinx.coroutines.CoroutineDispatcher cannot be provided without an @Provides-annotated method. public abstract static class ApplicationC implements ApplicationComponent, ^ kotlinx.coroutines.CoroutineDispatcher is injected at com.anagramma.babacodashboard.data.subscriptions.local.SubscriptionsLocalDataSource(…, dispatcher) com.anagramma.babacodashboard.data.subscriptions.local.SubscriptionsLocalDataSource is injected at com.anagramma.babacodashboard.data.subscriptions.SubscriptionsRepositoryImpl(localDataSource, …) com.anagramma.babacodashboard.data.subscriptions.SubscriptionsRepositoryImpl is injected at com.anagramma.babacodashboard.di.SubscriptionsModule.bindSubscriptionsRepository(subscriptionsRepositoryImpl) javax.inject.Provider<com.anagramma.babacodashboard.data.subscriptions.SubscriptionsRepository> is injected at com.anagramma.babacodashboard.ui.orders.subscriptions.SubscriptionsViewModel_AssistedFactory(repository, …) com.anagramma.babacodashboard.ui.orders.subscriptions.SubscriptionsViewModel_AssistedFactory is injected at com.anagramma.babacodashboard.ui.orders.subscriptions.SubscriptionsViewModel_HiltModule.bind(factory) java.util.Map<java.lang.String,javax.inject.Provider<androidx.hilt.lifecycle.ViewModelAssistedFactory<? extends androidx.lifecycle.ViewModel>>> is injected at androidx.hilt.lifecycle.ViewModelFactoryModules.ActivityModule.provideFactory(…, viewModelFactories) @dagger.hilt.android.internal.lifecycle.DefaultActivityViewModelFactory java.util.Set<androidx.lifecycle.ViewModelProvider.Factory> is requested at dagger.hilt.android.internal.lifecycle.DefaultViewModelFactories.ActivityEntryPoint.getActivityViewModelFactory() [com.anagramma.babacodashboard.BabacoDashboardApplication_HiltComponents.ApplicationC → com.anagramma.babacodashboard.BabacoDashboardApplication_HiltComponents.ActivityRetainedC → com.anagramma.babacodashboard.BabacoDashboardApplication_HiltComponents.ActivityC] The following other entry points also depend on it: dagger.hilt.android.internal.lifecycle.DefaultViewModelFactories.FragmentEntryPoint.getFragmentViewModelFactory() [com.anagramma.babacodashboard.BabacoDashboardApplication_HiltComponents.ApplicationC → com.anagramma.babacodashboard.BabacoDashboardApplication_HiltComponents.ActivityRetainedC → com.anagramma.babacodashboard.BabacoDashboardApplication_HiltComponents.ActivityC → com.anagramma.babacodashboard.BabacoDashboardApplication_HiltComponents.FragmentC]


我错过了 CoroutineDispatcher 上的一些注释吗?

最佳答案

不知道这是否是最好的方法,但我只是通过创建 DispatcherModule 来解决关注 this guide

@Module
@InstallIn(ApplicationComponent::class)
object DispatcherModule {
    @IoDispatcher
    @Provides
    fun providesIoDispatcher(): CoroutineDispatcher = Dispatchers.IO
}

@Retention(AnnotationRetention.BINARY)
@Qualifier
annotation class IoDispatcher
然后我重构了我的原始类以使用 IoDispatcher 注释:
class SubscriptionsLocalDataSource @Inject constructor(
    private val subscriptionsDao: SubscriptionsDao,
    @IoDispatcher private val dispatcher: CoroutineDispatcher
) : SubscriptionsDataSource {


}

关于android - Hilt - CoroutineDispatcher 上缺少绑定(bind),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63847790/

相关文章:

c# - 统一扩展

android - 以编程方式更改 R.string 的值

android - 如何在用户未与应用程序交互时退出或重新启动 Android 应用程序

java - Android Media Codec API 基本示例

android - 收到错误 : Execution failed for task ':app:lintVitalRelease'

Android View Binding - Fragment 生命周期中的清除绑定(bind)

c# - 为什么即使未注册 IOptions 也会得到解决

javascript - ES6 模块的依赖注入(inject)

android - java.lang.NoSuchMethodError : android. 应用程序通知$Builder.build

android - 在android中像gmail一样显示弹出窗口