我收到以下错误:
错误:(8, 1) 错误:如果没有 @Inject 构造函数或 @Provides- 或 @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
,然后将字符串注入到两个字段中。我认为问题出在限定符上。
非常感谢任何帮助。
Using:
- 安卓工作室3.0.1
- 科特林 1.2.10
- 匕首2.14.1
使用 JSR-330 + Kotlin 进行限定和命名注入存在一些问题(Dagger2 是此问题的实现)。通过最近查看 Github 上 Dagger2 项目的积压工作,我知道 Google 团队正在寻求在即将发布的版本(没有时间表)中提供更主动的帮助/更有用的错误消息。
你缺少的是@field:<Qualifier>
注释使用类型目标 http://kotlinlang.org/docs/reference/annotations.html#annotation-use-site-targets如链接文档中所述。所以尝试一下;
@Inject @field:Spanish lateinit var holaMundoText: String
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)