android - Dagger2 Qualifier 不适用于 Kotlin?

标签 android kotlin dagger-2

我有一个简单的类如下

class MainString(val msg: String)

我想给它注入(inject)不同的参数,所以我按照 https://google.github.io/dagger/users-guide 中显示的指南使用 @Named 限定符

我的 AppModule 有了

@Provides @Named("Two")
fun provideTwoMainString(): MainString {
    return MainString("Two")
}

@Provides @Named("One")
fun provideOneMainString(): MainString {
    return MainString("One")
}

在我的 MainActivity 中,我只是调用

@Inject @Named("One")
lateinit var stringOne: MainString

@Inject @Named("Two")
lateinit var stringTwo: MainString

但是,当我编译时,它会提示

Error:(11, 1) error: com.elyeproj.demo_dagger_scope.MainString cannot be provided without an @Inject constructor or from an @Provides- or @Produces-annotated method.

似乎希望我提供另一个没有限定符的 Provider。因此,如果我添加以下内容,所有内容都会编译。但我不习惯,因为我想要不同的参数注入(inject)。

@Provides
fun provideMainString(): MainString {
    return MainString("Solo")
}

我做错了什么?

最佳答案

注释在 kotlin 上的工作略有不同。看 this doc

您必须将字段注释为:

@Inject @field:Named("Two")
lateinit var stringOne: MainString

关于android - Dagger2 Qualifier 不适用于 Kotlin?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48564926/

相关文章:

android - 从 android 上的 IP 摄像机接收视频流

android - 在Kotlin中重新格式化代码后,如何避免缩进以继续大括号?

android - 将 gradle 版本更新到 5.1.1,但 kapt 不起作用

android - 我应该为 Dagger 2 中的每个 Activity 使用一个组件吗?

java - 错误: duplicate class while compiling java project with Gradle containing dagger generated sources

android - 更好看的谷歌游戏等候室用户界面

java - 自定义 Runnable 实现,用于检查每行代码之间的 Thread.currentThread().isInterrupted()

android - 强制关闭创建简单的游标适配器

android - 如何使用rx和kotlin对远程服务一一进行请求调用?

android - 如何在 okhttp3 的 dagger 2 模块中检查互联网连接