Nic*_*zzi 3 android dependency-injection kotlin dagger-hilt
我正在使用Hilt作为依赖注入管理器重构我的应用程序。\n我有一个构造函数可注入类,构造函数中有两个参数。参数之一是CoroutineDispatcher.
class SubscriptionsLocalDataSource @Inject constructor(\n private val subscriptionsDao: SubscriptionsDao,\n private val dispatcher: CoroutineDispatcher = Dispatchers.IO\n) : SubscriptionsDataSource {\n\n}\nRun Code Online (Sandbox Code Playgroud)\n当我尝试构建应用程序时,出现缺少绑定错误,如下所示:
\n\n\n错误:[Dagger/MissingBinding] kotlinx.coroutines.CoroutineDispatcher 如果没有 @Provides 注释的方法,则无法提供。\n公共抽象静态类 ApplicationC 实现 ApplicationComponent,\n^\nkotlinx.coroutines.CoroutineDispatcher 被注入到\ncom.anagramma.babacodashboard .data.subscriptions.local.SubscriptionsLocalDataSource(\xe2\x80\xa6, 调度程序)\ncom.anagramma.babacodashboard.data.subscriptions.local.SubscriptionsLocalDataSource 被注入\ncom.anagramma.babacodashboard.data.subscriptions.SubscriptionsRepositoryImpl(localDataSource, \xe2\x80\xa6)\ncom.anagramma.babacodashboard.data.subscriptions.SubscriptionsRepositoryImpl 被注入\ncom.anagramma.babacodashboard.di.SubscriptionsModule.bindSubscriptionsRepository(subscriptionsRepositoryImpl)\njavax.inject.Provider<com.anagramma.babacodashboard。 data.subscriptions.SubscriptionsRepository> 注入于\ncom.anagramma.babacodashboard.ui.orders.subscriptions.SubscriptionsViewModel_AssistedFactory(repository, \xe2\x80\xa6)\ncom.anagramma.babacodashboard.ui.orders.subscriptions.SubscriptionsViewModel_AssistedFactory 注入于\ncom.anagramma.babacodashboard.ui.orders.subscriptions.SubscriptionsViewModel_HiltModule.bind(factory)\njava.util.Map<java.lang.String,javax.inject.Provider<androidx.hilt.lifecycle.ViewModelAssistedFactory<? extends androidx.lifecycle.ViewModel>>> 注入于\nandroidx.hilt.lifecycle.ViewModelFactoryModules.ActivityModule.provideFactory(\xe2\x80\xa6, viewModelFactories)\n@dagger.hilt.android.internal.lifecycle.DefaultActivityViewModelFactory java. util.Set<androidx.lifecycle.ViewModelProvider.Factory> 请求于\ndagger.hilt.android.internal.lifecycle.DefaultViewModelFactories.ActivityEntryPoint.getActivityViewModelFactory() [com.anagramma.babacodashboard.BabacoDashboardApplication_HiltComponents.ApplicationC \xe2\x86\x92 com .anagramma.babacodashboard.BabacoDashboardApplication_HiltComponents.ActivityRetainedC \xe2\x86\x92 com.anagramma.babacodashboard.BabacoDashboardApplication_HiltComponents.ActivityC]\n以下其他入口点也依赖于它:\ndagger.hilt.android.internal.lifecycle.DefaultViewModelFactories.FragmentEntryPoint。 getFragmentViewModelFactory() [com.anagramma.babacodashboard.BabacoDashboardApplication_HiltComponents.ApplicationC \xe2\x86\x92 com.anagramma.babacodashboard.BabacoDashboardApplication_HiltComponents.ActivityRetainedC \xe2\x86\x92 com.anagramma.babacodashboard.BabacoDashboardApplication_HiltComponents.ActivityC \xe2\x86\x92 com .anagramma.babacodashboard.BabacoDashboardApplication_HiltComponents.FragmentC]
\n
我是否缺少 CoroutineDispatcher 上的一些注释?
\nNic*_*zzi 10
不知道这是否是最好的方法,但我只是DispatcherModule按照本指南创建了一个解决方案
@Module
@InstallIn(SingletonComponent::class)
object DispatcherModule {
@IoDispatcher
@Provides
fun providesIoDispatcher(): CoroutineDispatcher = Dispatchers.IO
}
@Retention(AnnotationRetention.BINARY)
@Qualifier
annotation class IoDispatcher
Run Code Online (Sandbox Code Playgroud)
然后我重构了原来的类以使用 IoDispatcher 注释:
class SubscriptionsLocalDataSource @Inject constructor(
private val subscriptionsDao: SubscriptionsDao,
@IoDispatcher private val dispatcher: CoroutineDispatcher
) : SubscriptionsDataSource {
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2158 次 |
| 最近记录: |