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