android - 如果没有 @Provides 注解的方法,则无法提供 Kotlin Dagger ViewModel

标签 android kotlin dagger-2 dagger

我正在尝试将 Dagger 2.15 与我的 Kotlin 项目集成。即使我绑定(bind)了 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

最佳答案

我已经查看了您的代码,我相信问题出在这段代码中:

@Binds
@IntoMap
@ViewModelKey(MainViewModel::class)
abstract fun bindMainViewModel(userViewModel: MainViewModel): MainViewModel

为了绑定(bind) MainViewModel,首先您需要在 MainViewModel 中进行构造函数注入(inject),如下所示:

class MainViewModel
@Inject constructor()
: AndroidViewModel(Application())

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

 @Binds
 @IntoMap
 @ViewModelKey(MainViewModel::class)
 abstract fun bindMainViewModel(userViewModel: MainViewModel): ViewModel

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

关于android - 如果没有 @Provides 注解的方法,则无法提供 Kotlin Dagger ViewModel,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49361253/

相关文章:

android - 如何获取 Android Slices 的彩色文本?

android - Dagger 2 依赖关系图不完整

android - 从文件夹onclick android随机播放音乐

redirect - 如何将Kotlin stdio重定向到文件?

java - 在模拟器中拍照后相机崩溃

exception - 在Kotlin异常 block 中,如何实现 'else'(成功) block ?

android - Dagger 2 Kotlin 和 Room 出现错误

java - 如何提供相同类型的对象? Dagger 2

android - 将一个表中的值插入到多个条目中

Android httpUrlConnection发送和接收数据