匕首注射不适用于Kotlin的“物体”

花了大量的时间想弄清楚为什么我的匕首注射不起作用, 我意识到Kotlin中的“对象”types是个问题。

以下行不通,注入的“财产”是空的。

object SomeSingleton { @Inject lateinit var property: Property init { DaggerGraphController.inject(this) } } 

但是,下面的DID工作得很好:

 class NotSingleton { @Inject lateinit var property: Property init { DaggerGraphController.inject(this) } } 

我试过谷歌,我试过文件,但我不能指出背后的原因。 另外请注意,我还没有尝试过这与JAVA,JAVA没有反正建立单身人士的概念。

这是为什么? 为什么一个科特林单身人士无法注射成员,但一个非单身人士课程可以?

如果你看看kotlin字节码,你会发现你写的代码被翻译成以下内容:

 public final class SomeSingleton { public static LProperty; property // <- Notice static field here public final getProperty()LProperty ... public final setProperty(LProperty)V ... } 

正如你所看到的,实际的字段是静态的,这使得它不适合实例注入。 您可以尝试将@Inject注释移动到setter方法上:

 object SomeSingleton { @set:Inject lateinit var property: Property ... }