我正在尝试将Dagger 2.15与我的Kotlin项目集成。即使我绑定了ViewModel,
,我也会遇到编译时异常
error: [dagger.android.AndroidInjector.inject(T)] java.util.Map<java.lang.Class<? extends android.arch.lifecycle.ViewModel>,? extends javax.inject.Provider<android.arch.lifecycle.ViewModel>> cannot be provided without an @Provides-annotated method.
答案 0 :(得分:2)
我已经完成了你的代码,我相信问题出在这个代码的某处:
@Binds
@IntoMap
@ViewModelKey(MainViewModel::class)
abstract fun bindMainViewModel(userViewModel: MainViewModel): MainViewModel
对于绑定MainViewModel,首先需要在MainViewModel中进行构造函数注入,如下所示:
class MainViewModel
@Inject constructor()
: AndroidViewModel(Application())
你绑定或使用@Binds与你的MainViewModel的方式不正确你不能返回你作为参数传递的内容,dagger将在构建时抛出循环依赖异常。有关Binds的更多信息,请参阅此article并避免此错误,请将绑定代码更改为:
@Binds
@IntoMap
@ViewModelKey(MainViewModel::class)
abstract fun bindMainViewModel(userViewModel: MainViewModel): ViewModel
尝试这些更改,如果您遇到任何问题,请与我们联系。感谢