为了账号安全,请及时绑定邮箱和手机立即绑定

为什么将 @Singleton 注释添加到 ViewModelProvider.Factory

为什么将 @Singleton 注释添加到 ViewModelProvider.Factory

守着星空守着你 2021-10-27 16:46:27
我一直在尝试使用 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在子组件内.


查看完整回答
反对 回复 2021-10-27
  • 1 回答
  • 0 关注
  • 165 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信