android - Android Hilt - 如何注入 viewModelScope
问题描述
我想注入 viewModelscope 但我做不到。
class PostPageSource @Inject constructor(
val repository: MyRepository,
val scope: CoroutineScope,
val mapper: MyMapper
) : PageKeyedDataSource<Int, Posts>() {
错误输出如下:
[Dagger/MissingBinding] kotlinx.coroutines.CoroutineScope cannot be provided without an @Provides-annotated method.
public abstract static class ApplicationC implements App_GeneratedInjector,
我尝试过了:
@Module
@InstallIn(FragmentComponent::class)
object PagingModule {
@Singleton
@Provides
fun provideViewModel(fragment: Fragment) : UserDetailViewModel {
val viewModel: UserDetailViewModel by (fragment as UserDetailFragment).viewModels()
return viewModel
}
fun provideCorountineScope(fragment: UserDetailViewModel): CoroutineScope {
return fragment.viewModelScope
}
}
错误输出如下:
error: [Dagger/MissingBinding] kotlinx.coroutines.CoroutineScope cannot be provided without an @Provides-annotated method.
public abstract static class ApplicationC implements App_GeneratedInjector,
^
kotlinx.coroutines.CoroutineScope is injected at
com.maksu.insider.userdetail.paging.PostPageSource(…, scope, …)
javax.inject.Provider<com.maksu.insider.userdetail.paging.PostPageSource> is injected at
com.maksu.insider.userdetail.paging.PostPageSourceFactory(providerDataSource)
javax.inject.Provider<com.maksu.insider.userdetail.paging.PostPageSourceFactory> is injected at
com.maksu.insider.userdetail.UserDetailViewModel_AssistedFactory(…, dataSourceFactory)
com.maksu.insider.userdetail.UserDetailViewModel_AssistedFactory is injected at
com.maksu.insider.userdetail.UserDetailViewModel_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.maksu.insider.App_HiltComponents.ApplicationC → com.maksu.insider.App_HiltComponents.ActivityRetainedC → com.maksu.insider.App_HiltComponents.ActivityC]
以下其他入口点也依赖于它:
解决方案
我不知道你为什么要这样做,但我认为你@Provides
在函数顶部错过了一些:
@Provides
fun provideCorountineScope(fragment: UserDetailViewModel): CoroutineScope {
return fragment.viewModelScope
}
但我真的不建议这样做。如果您想要一个与视图模型一样长的协程,那么只需在视图模型中启动协程。
推荐阅读
- python - 使用 Python 解码来自传感器的有效载荷
- vb.net - 如何将字符串转换为另一种方式并检测换行符并写入 vb .net 中的文本文件
- javascript - 无法在javascript的类方法中访问类实例变量
- spring-boot - 用于匿名或经过身份验证的用户的 Spring Security Rest 控制器方法
- flutter - 即使快照有数据,数据也返回 Null,Flutter
- node.js - 由于 nginx 反向代理,无法获取用户 ip
- c++ - 尽管移动,但 C++11/Qt 内存泄漏
- networking - 远程访问配置担心
- database - 如何防止firestore中单个用户的垃圾邮件喜欢(数据库中的多次写入)
- python - 如果我想要顺序独立相等,我应该如何实现 __eq__ 和 __hash__