我正在重构我的应用程序Hilt作为依赖注入管理器。
我有一个构造函数可注入类,构造函数中有两个参数。其中一个参数是CoroutineDispatcher
.
class SubscriptionsLocalDataSource @Inject constructor(
private val subscriptionsDao: SubscriptionsDao,
private val dispatcher: CoroutineDispatcher = Dispatchers.IO
) : SubscriptionsDataSource {
}
当我尝试构建应用程序时,出现缺少绑定错误,如下所示:
错误:[Dagger/MissingBinding] 如果没有 @Provides 注释的方法,则无法提供 kotlinx.coroutines.CoroutineDispatcher。
公共抽象静态类ApplicationC实现ApplicationComponent,
^
kotlinx.coroutines.CoroutineDispatcher 被注入
com.anagramma.babacodashboard.data.subscriptions.local.SubscriptionsLocalDataSource(…,调度程序)
com.anagramma.babacodashboard.data.subscriptions.local.SubscriptionsLocalDataSource 被注入
com.anagramma.babacodashboard.data.subscriptions.SubscriptionsRepositoryImpl(localDataSource, …)
com.anagramma.babacodashboard.data.subscriptions.SubscriptionsRepositoryImpl 被注入
com.anagramma.babacodashboard.di.SubscriptionsModule.bindSubscriptionsRepository(subscriptionsRepositoryImpl)
javax.inject.Provider 被注入
com.anagramma.babacodashboard.ui.orders.subscriptions.SubscriptionsViewModel_AssistedFactory(存储库,...)
com.anagramma.babacodashboard.ui.orders.subscriptions.SubscriptionsViewModel_AssistedFactory 被注入
com.anagramma.babacodashboard.ui.orders.subscriptions.SubscriptionsViewModel_HiltModule.bind(工厂)
java.util.Map>> 被注入
androidx.hilt.lifecycle.ViewModelFactoryModules.ActivityModule.provideFactory(…, viewModelFactories)
@dagger.hilt.android.internal.lifecycle.DefaultActivityViewModelFactory java.util.Set 请求于
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]
以下其他入口点也依赖于它:
dagger.hilt.android.internal.lifecycle.DefaultViewModelFactories.FragmentEntryPoint.getFragmentViewModelFactory() [com.anagramma.babacodashboard.BabacoDashboardApplication_HiltComponents.ApplicationC → com.anagramma.babacodashboard.BabacoDashboardApplication_HiltComponents.ActivityRetainedC → com.anagramma.babacodashboard.BabacoDash boardApplication_HiltComponents.ActivityC → com.boardApplication_HiltComponents.ActivityC → com.boardApplication_HiltComponents.ActivityC → com. anagramma.babacodashboard.BabacoDashboardApplication_HiltComponents.FragmentC]
我是否缺少 CoroutineDispatcher 上的一些注释?
不知道这是否是最好的方法,但我只是通过创建一个来解决DispatcherModule
依照指示本指南 https://www.valueof.io/blog/injecting-coroutines-dispatchers-with-dagger
@Module
@InstallIn(SingletonComponent::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 {
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)