[英]Android Hilt - How to inject viewModelScope
I want to inject viewModelscope but I just couldn't do it.我想注入 viewModelscope 但我就是做不到。
class PostPageSource @Inject constructor(
val repository: MyRepository,
val scope: CoroutineScope,
val mapper: MyMapper
) : PageKeyedDataSource<Int, Posts>() {
The error output is as follows:错误输出如下:
[Dagger/MissingBinding] kotlinx.coroutines.CoroutineScope cannot be provided without an @Provides-annotated method.
public abstract static class ApplicationC implements App_GeneratedInjector,
I tried to:我试过了:
@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
}
}
The error output is as follows:错误输出如下:
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]
The following other entry points also depend on it:以下其他入口点也依赖于它:
I don't know why you want to do that, but I think you miss some @Provides
at the top of your function:我不知道您为什么要这样做,但我认为您错过了函数顶部的一些
@Provides
:
@Provides
fun provideCorountineScope(fragment: UserDetailViewModel): CoroutineScope {
return fragment.viewModelScope
}
But I really don't recommend doing this.但我真的不建议这样做。 If you want a coroutine that should last as long as the viewmodel does, then just launch the coroutine inside the viewmodel.
如果您想要一个与视图模型一样长的协程,那么只需在视图模型中启动协程即可。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.