我一直在尝试使用 Dagger2 注入一个ViewModelProvider.Factory实现,如本例所示:GithubBrowserExample我复制了完全相同的类,但是,当我尝试构建时,出现以下错误:
error: [Dagger/MissingBinding] [dagger.android.AndroidInjector.inject(T)] java.util.Map<java.lang.Class<? extends android.arch.lifecycle.ViewModel>,javax.inject.Provider<android.arch.lifecycle.ViewModel>> cannot be provided without an @Provides-annotated method.
我花了 2 天的时间试图找到一个解决方案,一切都是关于通配符和使用@JvmSuppressWildcards我已经在我的班级中使用过的注释,我还尝试在构造函数签名中更改MapforMutableMap只是为了得到同样令人沮丧的错误,直到我不小心删除@Singleton从:
@Singleton
class GithubViewModelFactory @Inject constructor(
private val creators: Map<Class<out ViewModel>, @JvmSuppressWildcards Provider<ViewModel>>
) : ViewModelProvider.Factory {
override fun <T : ViewModel> create(modelClass: Class<T>): T {
val creator = creators[modelClass] ?: creators.entries.firstOrNull {
modelClass.isAssignableFrom(it.key)
}?.value ?: throw IllegalArgumentException("unknown model class $modelClass")
try {
@Suppress("UNCHECKED_CAST")
return creator.get() as T
} catch (e: Exception) {
throw RuntimeException(e)
}
}
}
在那之后,我的项目编译了,那个烦人的错误消失了!我究竟做错了什么?
红颜莎娜
相关分类