我有一个简单的类如下
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/