使用 Kotlin 语言的字段注入不会生成 DaggerComponent
Field Injection using Kotlin Language is not generating DaggerComponent
我正在尝试使用 Kotlin 语言学习 MVVM。我遇到了一些问题,请帮忙。我已经在 google 上搜索过,但没有找到任何答案。
积分
- 当我使用构造函数注入时,它工作正常并生成 DaggerComponent class 并创建对象。
- 当我将构造函数注入更改为字段注入时,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
我正在尝试使用 Kotlin 语言学习 MVVM。我遇到了一些问题,请帮忙。我已经在 google 上搜索过,但没有找到任何答案。
积分
- 当我使用构造函数注入时,它工作正常并生成 DaggerComponent class 并创建对象。
- 当我将构造函数注入更改为字段注入时,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