Elye
Elye

Reputation: 60081

How to specify Dagger 2 Qualifier Annotation to Provider function Constructor parameter?

I have my Dagger 2 Qualifier defined

@Qualifier
@MustBeDocumented
@kotlin.annotation.Retention(AnnotationRetention.RUNTIME)
annotation class TrackerQualifier(val value: TrackerType)

enum class TrackerType {
    INTERNAL,
    EXTERNAL
}

And it works well, with

@Provides
@TrackerQualifier(TrackerType.INTERNAL)
@Singleton
UsageTracker providesInternalTracker(InternalTracker analyticsTracker) {
    return new UsageTracker(analyticsTracker);
}

@Provides
@TrackerQualifier(TrackerType.EXTERNAL)
@Singleton
UsageTracking providesExternalTracker(ExternalTracker eventTracker) {
    return eventTracker;
}

However, if I like to send it though to another injected module.

@Provides
fun provideCommonImage(
        imageEngine: ImageEngine,
        externalUsageTracking: UsageTracking) =
        CommonImage(imageEngine, externalUsageTracking)

It will compile fail, as it doesn't know is the externalUsageTracking: UsageTracking above is INTERNAL or EXTERNAL. How could I annotate it to the parameter?

Upvotes: 1

Views: 902

Answers (1)

Prince Chen
Prince Chen

Reputation: 36

try to explicit the qualifier.

@Provides
fun provideCommonImage(
        imageEngine: ImageEngine,
        @TrackerQualifier(TrackerType.EXTERNAL) tracker: UsageTracker) =
        CommonImage(imageEngine, tracker)

Upvotes: 2

Related Questions