Kotlin + Dagger2:不能提供没有@Inject构造函数或从@提供或@产生注释的方法

我收到以下错误:

错误:(8,1)错误:无法使用@Inject构造函数或@Proxy或@ Produces注释方法提供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" } 

注入在MainActivity中完成:

 class MainActivity : AppCompatActivity() { @Inject @Spanish lateinit var holaMundoText: String @Inject @English lateinit var helloWorldText: String } 

我也尝试直接在组件中声明getter,但是它失败了同样的错误。 在将模块方法声明为静态时也是如此。

就像应该,代码工作正常,只有一个@Provide ,然后字符串注入这两个领域。 我认为问题是与预选赛。

任何帮助,高度赞赏。


使用:

  • Android Studio 3.0.1
  • Kotlin 1.2.10
  • 匕首2.14.1

JSR-330 + Kotlin(Dagger2就是这个实现)有资格和命名的注入。 从最近回顾Github上的Dagger2项目的积压,我知道Google团队正在寻求在即将发布的版本(无时间尺度)内提供更主动的帮助/更有帮助的错误消息。

缺少的是@field: 批注使用types目标 ,如链接文档中所述。 所以试试吧

 @Inject @field:Spanish lateinit var holaMundoText: String