如果没有 @Provides 注释方法,则无法提供 Kotlin Dagger ViewModel

Ram*_*sad 2 android kotlin dagger dagger-2

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

Ase*_*rma 5

我已经看过你的代码,我相信问题出在这段代码的某个地方:

@Binds
@IntoMap
@ViewModelKey(MainViewModel::class)
abstract fun bindMainViewModel(userViewModel: MainViewModel): MainViewModel
Run Code Online (Sandbox Code Playgroud)

对于绑定 MainViewModel,首先您需要在 MainViewModel 中进行构造函数注入,如下所示:

class MainViewModel
@Inject constructor()
: AndroidViewModel(Application())
Run Code Online (Sandbox Code Playgroud)

此外,您在 MainViewModel 中绑定或使用 @Binds 的方式不正确,您无法返回作为参数传入的内容,dagger 将在构建时抛出循环依赖异常。有关绑定的更多信息,请参阅本文,并为避免此错误,请将绑定代码更改为:

 @Binds
 @IntoMap
 @ViewModelKey(MainViewModel::class)
 abstract fun bindMainViewModel(userViewModel: MainViewModel): ViewModel
Run Code Online (Sandbox Code Playgroud)

尝试这些更改,如果您遇到任何问题,请告诉我。谢谢