Kotlin + Dagger2 出现 Dagger does not support injection into private fields 解决方案
Posted microhex
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Kotlin + Dagger2 出现 Dagger does not support injection into private fields 解决方案相关的知识,希望对你有一定的参考价值。
在项目中使用KT + Dagger2,在注入的时候,代码如下:
class MainActivity : AppCompatActivity()
@Inject
var presenter : Presenter? = null
在代码编译时,直接报错:
其实已经说过很清楚了,Dagger不支持私有属性的注入,那这个就比较尴尬了,因为Kt
中的presenter
反编译代码如下:
public final class MainActivity extends androidx.appcompat.app.AppCompatActivity
@org.jetbrains.annotations.Nullable()
@javax.inject.Inject()
private com.xing.jetpacklearn.Presenter presenter;
public MainActivity()
super();
此时presenter
的属性为private
,不符合Dagger的要求。那应该怎么处理呢?两种方法:
方法一:
代码如下:
class MainActivity : AppCompatActivity()
var presenter : Presenter? = null
@Inject set
只需要在属性的set方法上添加@Inject
即可。
方法二: 使用`@JvmField`关键字修饰:
class MainActivity : AppCompatActivity()
@Inject
@JvmField
var presenter : Presenter? = null
都可以解决。
以上是关于Kotlin + Dagger2 出现 Dagger does not support injection into private fields 解决方案的主要内容,如果未能解决你的问题,请参考以下文章
Kotlin + Dagger2 出现 Dagger does not support injection into private fields 解决方案
Kotlin + Dagger2 出现 Dagger does not support injection into private fields 解决方案
kotlin + Dagger2 :没有@Provides-annotated 方法就无法提供