当前位置: 首页 > 知识库问答 >
问题:

在Android中,我不能用HILT将Dao注入到存储库类中

焦宏硕
2023-03-14

现在我想转换,一个洞应用程序,我有房间,到这个干净的架构。在本教程中,Florian使用DI,将TaskDao注入到TaskViewModel,但我有一个存储库类。

所以我到了这样一个点,即应用程序的构建没有错误。

这是我的存储库:

    class AnioRepository constructor(
        private val agrotrackerApi: AgrotrackerApi
    ) {
    val TAG = "AnioRepository"
    //val anioDao: AnioDao

    fun downloadAnios(): AniosResponse? {
        GlobalScope.launch(Dispatchers.IO) {
            val result = agrotrackerApi.getAnios()
            if (result.isSuccessful) {
                for (anio in result.body()!!){
                    Log.d(TAG, anio.toString())
                }
            }
        }
        return null
    }

    fun getAnios() {
        //anioDao.getListAnios()
    }

    }
@Module
@InstallIn(ApplicationComponent::class)
object RepositoryModule {

    @Singleton
    @Provides
    fun providesAnioRepository( agrotrackerApi: AgrotrackerApi) : AnioRepository {
        return AnioRepository(agrotrackerApi)
    }

}
class AnioRepository constructor(
        private val anioDao: AnioDao,
        private val agrotrackerApi: AgrotrackerApi
    ) {
    val TAG = "AnioRepository"
   ...

然后,更改RepositoryModule,以匹配构造函数...

...
    fun providesAnioRepository( anioDao: AnioDao, agrotrackerApi: AgrotrackerApi) : AnioRepository 
        =  AnioRepository(anioDao, agrotrackerApi)
...

公共抽象类ATMDatabase扩展了AndroidX.room.RoomDatabase{^C:\pryectos\androidStudioProjects\atMobileXKT\app\build\generated\source\kapt\cap\build\kapt\debug\capt\com\cse\atm\atm\atmapplication_hiltcomponents.java:155:错误:[dagger/missingbinding]@com.cse.atm.di.applicationScope Kotlinx.coroutinescope没有@provides-annotated.database.ATMDatabase.callback(,applicationScope)com.cse.atm.database.ATMDatabase.callback在com.cse.atm.di.appmodule.providesdatabase(,callback)com.cse.atm.di.appmodule.providesdatabase(,callback)com.cse.atm.di.appmodule.providesdatabase(,callback)com.cse.atm.di.appmodule.providesdatabase.ATMDatabase在

这个错误是什么意思?我错过了什么?

@ApplicationScope注释在另一个AppModule.kt中,我不知道问题在哪里。

任何帮助都将不胜感激!!

致以最诚挚的问候

共有1个答案

龙飞
2023-03-14

您的atmdatabase.callback请求使用自定义限定符@applicationscopecoroutinescope,但是您没有在任何模块中提供这样的coroutinescope

为了提供一个coroutine范围,您链接的教程在28分钟内添加了以下代码

@Provides
@Singleton
fun provideApplicationScope() = CoroutineScope(SupervisorJob())

由于在请求coroutine作用域时使用@applicationscope限定符,因此还需要向@provides方法添加限定符:

@Provides
@Singleton
@ApplicationScope
fun provideApplicationScope() = CoroutineScope(SupervisorJob())
 类似资料:
  • 我对匕首比较陌生,我刚开始使用剑柄。我想要的是在中注入一个应用程序范围的存储库(这意味着它需要在任何地方都是相同的对象)。存储库将用于检索用户、auth令牌和诸如此类的东西。这是我能找到的最接近的: 这样一切都可以正常工作,使用debug我可以确认每次使用时都注入了相同的实例。问题是第二次调用时(例如,视图被销毁并重新创建)。我不知道我是在科特林一侧犯了什么愚蠢的错误,还是在剑柄一侧犯了什么愚蠢的

  • 问题内容: 我需要将两个对象注入。其中一个是的实例,我得到这样的信息: 那么如何在我的services.yml中声明呢?这是服务: 问题答案: 我找到了此链接,这对我有用:

  • 我正在使用匕首2,我有一个定义如下的: 这是FYViewModel的: 但是,变量始终为空。 如何使用匕首2将Repositroy注入我的ViewModel?

  • 这是我的束缚 错误在于 /Users/X/AndroidStudioProjects/Corotuines/app/build/generated/source/kapt/debug/com/example/corotuines/application/ApplicationMain_HiltComponents.java:126:错误:[Dagger/Mis的绑定]com.example.cor

  • 我正在用Symfony制作简单的应用程序。我在这里配置了服务 我的服务使用存储库(例如,评论服务使用评论存储库),这里是的构造函数 性质 构造函数: 当我试图运行我的应用程序我得到这个错误 PHP致命错误:未捕获Symfony\Component\DependencyInjection\Exception\AutowiringFailedException:无法自动连线服务“AppBundle\R

  • Application.Properties 注意:即使有数据源bean也没有帮助: