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