我正在尝试将 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.
最佳答案
我已经查看了您的代码,我相信问题出在这段代码中:
@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/