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/48549260/

相关文章:

java - 在选项卡式 Activity 中找不到添加的元素

javascript - ionic 3 : Getting value from PlayStore link

kotlin - Flink:如何结合countWindowAll()处理有限流的其余部分

java - 为什么 shouldShowRequestPermissionRationale 不起作用?

java - Kotlin 接口(interface)上的 lambda 表达式

android - Dagger 2 中的测试模块和注入(inject)

java - 带有 Kotlin 的 Dagger 2,在 ApplicationComponent 中返回具有泛型的类型

android - 在 Android 设备上运行 github 上的 React Native 项目

android - 如何在使用单独的依赖项 gradle 文件时获取库版本更新通知

android - RxJava + Retrofit 2 链接 API 请求