作者:L的日记727248401 | 来源:互联网 | 2022-12-31 11:52
花了很多时间试图弄清楚为什么我的匕首注射不起作用; 我意识到Kotlin中的"对象"类型是问题所在.
以下不起作用,注入的"属性"为空.
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 singleton无法注入成员但是常规非单身人士类可以?
1> SimY4..:
如果您查看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
...
}
2> Dennis Zinko..:
我尝试使用dagger.Lazy
并且有效
@set:Inject
lateinit var authClient: dagger.Lazy