Kotlin 中的 Dagger 2:有没有办法在不使用 Module 的情况下使用默认参数化构造函数对类进行注入?

Ely*_*lye 1 kotlin dagger-2

我想让我的 Dagger 2 注入以下类并且不打算使用 @Module这样做。

所以我把@Inejct constructor如下

class InjectClass @Inject constructor(var txt: String = "Default")
Run Code Online (Sandbox Code Playgroud)

它不起作用,因为它抱怨

e: [kapt] An exception occurred: java.lang.IllegalStateException: Found multiple 
@Inject constructors: [InjectClass(java.lang.String), InjectClass()]
Run Code Online (Sandbox Code Playgroud)

有没有办法让它在这里工作?

tyn*_*ynn 6

您可以编写一个辅助构造函数,而不是使用默认值:

class InjectClass @Inject constructor(var txt: String) {
    constructor(): this("Default")
}
Run Code Online (Sandbox Code Playgroud)

像这样,您确保默认构造函数没有注释,@Inject并且Dagger知道如何创建InjectClass.

或者,我们可以这样做

class InjectClass(var txt: String) {
    @Inject constructor(): this("Default")
}
Run Code Online (Sandbox Code Playgroud)