Kotlin + Dagger 2:RuntimeException:没有零参数构造函数

时间:2018-07-25 06:22:30

标签: dependency-injection kotlin code-injection dagger-2

当我尝试通过构造函数在Kotlin类中注入一个类时,我遇到了此异常。

我一直在阅读有关在Java中解决此问题的方法,方法是在获取注入的类中添加一个空的构造函数。

但是,在Kotlin中似乎不可能(或者我不怎么做)。

引发异常的代码没有异常...只是简单的注入。

这里是注入异常的一段代码:

class RemoteService @Inject constructor(
        @SongListRepo private val songListRepo: SongListRepo): MainBaseService() {
...
...
...
}

当然,SongListRepo由模块以通常的Dagger 2方式提供。

--------编辑:---------

经过@Demigod的帮助和评论后,代码如下:

class RemoteService (): MainBaseService() {

    lateinit var songLR : SongListRepo
    @Inject constructor(@SongListRepo songListRepo: SongListRepo) : this(
    {
        this.songLR = songListRepo
    }

现在的问题是二级构造函数永远不会初始化

1 个答案:

答案 0 :(得分:0)

您收到的错误是否可能与此Service有关(我想像Fragment一样,它们必须具有零参数构造函数,以便平台能够重新创建它们)?如果,则可以使用按需注入,例如:

class RemoteService: MainBaseService() {

    @Inject
    @SongListRepo 
    private lateinit var songListRepo: SongListRepo

    init {
        // Something like this
        AndroidInjection.inject(this)
    }
}

或者,无论如何,您可以添加其他构造函数,例如:

class RemoteService constructor(): MainBaseService() {

     private lateinit var songListRepo: SongListRepo? = null

     @Inject constructor(@SongListRepo songListRepo: SongListRepo):this() {
         this.songListRepo = songListRepo
     }
}

有关构造函数here

的更多信息