Kotlin + Dagger2:没有@Inject构造函数或@ Provide-或@ Produces-annotated方法不能提供

crg*_*dos 7 android qualifiers kotlin dagger-2

我收到以下错误:

错误:(8,1)错误:如果没有@Inject构造函数或@ Provide-或@ Produces-annotated方法,则无法提供java.lang.String.

我试图制作一个提供两个合格字符串的模块.这是匕首的简化设置.

@Singleton
@Component(modules = [GreetingsModule::class])
interface AppComponent {
    fun inject(activity: MainActivity)
}

@Qualifier annotation class Spanish
@Qualifier annotation class French
@Qualifier annotation class English

@Module
@Singleton
class GreetingsModule {

    @Provides
    @Spanish
    fun providesHola(): String = "Hola mundo! - From Dagger"

    @Provides
    @English
    fun providesHello(): String = "Hello world! - From Dagger"

}
Run Code Online (Sandbox Code Playgroud)

注入在MainActivity中完成:

class MainActivity : AppCompatActivity() {

    @Inject @Spanish
    lateinit var holaMundoText: String

    @Inject @English
    lateinit var helloWorldText: String

}
Run Code Online (Sandbox Code Playgroud)

我也尝试直接在组件中声明getter,但它失败并出现相同的错误.将模块方法声明为静态时也一样.

正如应该的那样,只有一个代码可以正常工作@Provide,然后在两个字段中注入字符串.我认为问题在于限定符.

任何帮助都非常感谢.


使用:

  • Android Studio 3.0.1
  • 科特林1.2.10
  • 匕首2.14.1

Oce*_*ife 19

JSR-330 + Kotlin(Dagger2就是这样的实现)有一些合格且命名注射的问题.从最近审查Github上Dagger2项目的积压工作开始,我知道Google团队正在寻求在即将发布的版本(无时间表)中提供更多主动帮助/更有用的错误消息.

您缺少的是@field:<Qualifier> 注释使用类型目标,如链接文档中所述.所以试试;

@Inject @field:Spanish lateinit var holaMundoText: String
Run Code Online (Sandbox Code Playgroud)