如果没有@ Provide-annotated方法,则无法提供Kotlin Dagger ViewModel

时间:2018-03-19 10:55:24

标签: android kotlin dagger-2 dagger

我正在尝试将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.

我的代码: https://github.com/rramprasad/FoodRecipes

1 个答案:

答案 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

尝试这些更改,如果您遇到任何问题,请与我们联系。感谢