我一直在尝试使用 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从:@Singletonclass 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) } }}在那之后,我的项目编译了,那个烦人的错误消失了!我究竟做错了什么?
1 回答
红颜莎娜
TA贡献1842条经验 获得超12个赞
正如David Medenjak正确指出的那样,问题与范围有关,结果是我包含ViewModelModule
在我的MainActivityModule
而不是我的中,AppModule
并且由于组件/子组件结构AppModule
不知道如何提供,GithubViewModelFactory
因为它@Provides
在子组件内.
添加回答
举报
0/150
提交
取消