代码之家  ›  专栏  ›  技术社区  ›  Elye

如何将dagger2限定符注释指定给Provider函数构造函数参数?

  •  0
  • Elye  · 技术社区  · 7 年前

    我有匕首2

    @Qualifier
    @MustBeDocumented
    @kotlin.annotation.Retention(AnnotationRetention.RUNTIME)
    annotation class TrackerQualifier(val value: TrackerType)
    
    enum class TrackerType {
        INTERNAL,
        EXTERNAL
    }
    

    而且效果很好

    @Provides
    @TrackerQualifier(TrackerType.INTERNAL)
    @Singleton
    UsageTracker providesInternalTracker(InternalTracker analyticsTracker) {
        return new UsageTracker(analyticsTracker);
    }
    
    @Provides
    @TrackerQualifier(TrackerType.EXTERNAL)
    @Singleton
    UsageTracking providesExternalTracker(ExternalTracker eventTracker) {
        return eventTracker;
    }
    

    但是,如果我想把它发送到另一个注入模块。

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

    它将编译失败,因为它不知道 externalUsageTracking: UsageTracking INTERNAL EXTERNAL . 如何将其注释到参数?

    1 回复  |  直到 7 年前
        1
  •  2
  •   Sagar Zala    7 年前

    尝试显式限定符。

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