Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
596 views
in Technique[技术] by (71.8m points)

android - Dagger2 Qualifier not working with Kotlin?

I have a simple class as below

class MainString(val msg: String)

I want to inject with different argument to it, so I use the @Named Qualifier as per the guide shown in https://google.github.io/dagger/users-guide

With that my AppModule has

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

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

And in my MainActivity, I just call

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

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

However, when I compile, it complains

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.

It seems to want me to provide another Provider without the qualifier. So if I add the below, all will compiles. But it is not of used to me, as I want to have different argument injection.

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

What have I done wrong?

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

Annotation work slightly different on kotlin. look this doc

You have to annotate the field as:

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

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...