gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 16:43:55 25 4
gpt4 key购买 nike

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

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com