由于Dagger Hilt迁移时缺少MissingBinding,导致Gradle构建不断失败

问题描述

我正在尝试将项目迁移到Dagger Hilt,并且遇到绑定丢失的问题。我正在关注Google codelab以实现这一目标。

这是构建失败的地方:

error: [Dagger/MissingBinding] java.util.Map<java.lang.String,javax.inject.Provider<dagger.android.AndroidInjector.Factory<?>>> cannot be provided without an @Provides-annotated method.
  public abstract static class ApplicationC implements WhatToCookApp_GeneratedInjector,^
      java.util.Map<java.lang.String,javax.inject.Provider<dagger.android.AndroidInjector.Factory<?>>> is injected at
          dagger.android.DispatchingAndroidInjector(�,injectorFactoriesWithStringKeys)
      dagger.android.DispatchingAndroidInjector<java.lang.Object> is injected at
          dagger.android.support.DaggerAppCompatActivity.androidInjector
      at.bwappsandmore.whattocook.MainActivity is injected at
          dagger.android.AndroidInjector.inject(T) [at.bwappsandmore.whattocook.WhatToCookApp_HiltComponents.ApplicationC ? at.bwappsandmore.whattocook.di.ActivityModule_InjectMainActivity.MainActivitySubcomponent]
  It is also requested at:
      dagger.android.DispatchingAndroidInjector(�,injectorFactoriesWithStringKeys)
  The following other entry points also depend on it:

这些是项目的相关部分:

@HiltAndroidApp
open class WhatToCookApp : Application() {

    val appComponent: AppComponent by lazy {
        initializeComponent()
    }
    open fun initializeComponent(): AppComponent {
        return DaggerAppComponent.factory().create(applicationContext)
    }
}

AppComponent:

@Singleton
@Component(
    modules = [AppModule::class,ActivityModule::class,AndroidSupportInjectionModule::class]
)

interface AppComponent : AndroidInjector<WhatToCookApp> {
    @Component.Factory
    interface Factory {
        fun create(@BindsInstance appContext: Context): AppComponent
    }
}

AppModule:

@InstallIn(ApplicationComponent::class)
@Module
class AppModule {

    @Provides
    fun provideDB(@ApplicationContext context: Context): AppDatabase {
        return AppDatabase.getDatabase(context)
    }

    @Provides
    fun provideDAO(app: AppDatabase): WhatToCookDao {
        return app.whatToCookDao()
    }

    @Provides
    fun provideAppRepository(dao: WhatToCookDao): AppRepository{
        return AppRepository(dao)
    }

    @Provides
    fun provideSharedPreferences(@ApplicationContext context: Context): SharedPreferences {
        return PreferenceManager.getDefaultSharedPreferences(context)
    }
}

ApplicationModulde:

@InstallIn(ApplicationComponent::class)
@Module
interface ActivityModule {
    @ActivityScope
    @ContributesAndroidInjector(modules = [ViewModelModule::class])
    fun injectMainActivity(): MainActivity
}

ViewModelModule:

@InstallIn(ApplicationComponent::class)
@Module
abstract class ViewModelModule {
    companion object{
        @Provides
        fun providesSharedViewModel (activity: MainActivity) : SharedViewModel = activity.viewModel
    }
}

ActivityScope:

@Scope
@Retention(AnnotationRetention.RUNTIME)
annotation class ActivityScope

我意识到我必须对@Provides使用AndroidInjector注释,但是我不知道在哪里以及如何使用。任何帮助表示赞赏。

非常感谢您。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...