使用 Kotlin 语言的字段注入不会生成 DaggerComponent

Field Injection using Kotlin Language is not generating DaggerComponent

我正在尝试使用 Kotlin 语言学习 MVVM。我遇到了一些问题,请帮忙。我已经在 google 上搜索过,但没有找到任何答案。

积分

  1. 当我使用构造函数注入时,它工作正常并生成 DaggerComponent class 并创建对象。
  2. 当我将构造函数注入更改为字段注入时,DaggerComponent Class 未生成并抛出一些错误。

使用构造函数注入

lateinit var car: Car

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_main)
    val component = DaggerCarComponent.create()
    car = component.getCar()
    car.drive()
}

这里生成了DaggerCarComponet,通过dagger创建了car对象,也可以调用car的drive()方法class.

使用字段注入器

@Inject lateinit var car: Car

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_main)
    val component = DaggerCarComponent.create()
    //car = component.getCar()
    component.inject(this)
    car.drive()
}

上面我只是在字段上添加了@Inject注解,然后调用了CarComponent接口的inject()方法。但是,一旦我在 lateinit var car:Car

上添加 @Inject 注释,这就不起作用并抛出错误

这里是错误

Execution failed for task ':app:kaptDebugKotlin'. A failure occurred while executing org.jetbrains.kotlin.gradle.internal.KaptWithoutKotlincTask$KaptExecutionWorkAction java.lang.reflect.InvocationTargetException (no error message)

Try: Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full insights.

这是build.gradle(app)

implementation 'com.google.dagger:dagger-android:2.35.1'
//implementation 'com.google.dagger:dagger-android-support:2.21' // if you use the support libraries
annotationProcessor 'com.google.dagger:dagger-android-processor:2.21'
annotationProcessor 'com.google.dagger:dagger-compiler:2.28.3'

kapt 'com.google.dagger:dagger-android-processor:2.21'
kapt 'com.google.dagger:dagger-compiler:2.28.3'

build.gradle(项目)

classpath "com.android.tools.build:gradle:7.0.4"
    classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:1.5.20"

您只需要用@AndroidEntryPoint 注释您的 Car class,然后尝试字段注入。

您可以在此处找到更多信息:https://developer.android.com/training/dependency-injection/hilt-android#not-supported