@InstallIn 只能用于 @Module 或 @EntryPoint 类

ene*_*eci 3 android kotlin dagger dagger-hilt

我是 Android 依赖注入的新手。我正在使用 Dagger-Hilt,并且在我为 DB 提供程序生成的 AppModule 类中出现错误并且项目无法编译。

错误是@InstallIn can only be used on @Module or @EntryPoint classes 这是我的 AppModule 对象。我哪里出错了?

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

@Singleton
@Provides
fun provideAppDatabase(
    @ApplicationContext app: Context
) = Room.databaseBuilder(
    app,
    AppDatabase::class.java,
    "gelirkenal"
).build()

@Singleton
@Provides
fun provideItemDao(db: AppDatabase) = db.itemDao()
}
Run Code Online (Sandbox Code Playgroud)

小智 8

更改以下导入:

import com.google.android.datatransport.runtime.dagger.Module
import com.google.android.datatransport.runtime.dagger.Binds
Run Code Online (Sandbox Code Playgroud)

至 =>

import dagger.Module
import dagger.Binds
Run Code Online (Sandbox Code Playgroud)


use*_*078 6

我将模块的导入设置如下:

import com.google.android.datatransport.runtime.dagger.Module

但以下是正确的:

import dagger.Module


小智 5

更改ApplicationComponent::classSingletonComponent::class,您还可以通过参考此Hilt 生成的组件找到更多 hilt 生成的组件

@Module
@InstallIn(SingletonComponent::class)
object AppModule {

@Singleton
@Provides
fun provideAppDatabase(
    @ApplicationContext app: Context
) = Room.databaseBuilder(
    app,
    AppDatabase::class.java,
    "gelirkenal"
).build()

@Singleton
@Provides
fun provideItemDao(db: AppDatabase) = db.itemDao()
}
Run Code Online (Sandbox Code Playgroud)


i30*_*mb1 0

看起来您@InstallIn向项目中不相关的类添加了注释。

  • 我刚刚将 `@InstallIn` 注释添加到 AppModule 中。还向应用程序类添加了“@HiltAndroidApp”,向活动和片段添加了“@AndroidEntryPoint”,向 ViewModel 构造函数添加了“@ViewModelInject”。错误在哪里? (2认同)