问题描述
我想在Dagger2中使用viewmodel,但是我不知道如何在viewmodelProviders或viewmodelProvider.Factory中使用构造函数注入
如何在构造函数注入中使用viewmodel?我应该使用viewmodelProvider.Factory还是viewmodelProviders?
更新: 您可以在this link
中找到详细的解决方案解决方法
您可以创建自己的自定义类,扩展ViewModelProvider.Factory
class ViewModelFactory @Inject constructor(
private val providers: @JvmSuppressWildcards Map<Class<out ViewModel>,Provider<ViewModel>>
) : ViewModelProvider.Factory {
override fun <T : ViewModel> create(modelClass: Class<T>): T {
var provider = providers[modelClass]
if (provider == null) {
for ((key,value) in providers) {
if (modelClass.isAssignableFrom(key)) {
provider = value
break
}
}
}
if (provider == null) {
throw IllegalStateException("unknown model class $modelClass")
}
return provider.get() as T
}
}
为此类创建模块,并将该模块插入您的ApplicationComponent
类中
@Module
abstract class ViewModelFactoryModule {
@Binds
abstract fun bindViewModelFactory(viewModelFactory: ViewModelFactory): ViewModelProvider.Factory
}
然后在片段内部注入该工厂
@Inject
lateinit var factory: ViewModelProvider.Factory
并像这样初始化您的viewModel
val vm: YourViewModel by viewModels { factory }