kotlin qualifier annotaion被忽略了

时间:2016-04-26 10:41:16

标签: kotlin dagger-2

下面的代码第一次编译但在第二次构建时失败:

  

错误:SomeObject被多次绑定:

     

@Provides @NotNull SomeObject SomeModule.provideSomeObject()

     

@Provides @NotNull SomeObject SomeModule.provideSomeScopedObject()

似乎编译器会忽略连续构建上的Qualifier注释。

组件和模块用java编写时没有帮助,因为Main类中忽略了注释。

@dagger.Component(modules = arrayOf(SomeModule::class))
interface Component {
    fun inject(main: Main)
}

class Main {
    @field:[javax.inject.Inject SomeScope] lateinit var obj: SomeObject
}

@dagger.Module
class SomeModule {

    @dagger.Provides
    fun provideSomeObject(): SomeObject {
        return SomeObject("noScope")
    }

    @SomeScope
    @dagger.Provides
    fun provideSomeScopedObject(): SomeObject {
        return SomeObject("someScope")
    }
}

data class SomeObject(val name: String)

@javax.inject.Qualifier
@Retention(AnnotationRetention.SOURCE)
annotation class SomeScope

1 个答案:

答案 0 :(得分:1)

请尝试删除此行@Retention(AnnotationRetention.SOURCE)。据我所知,Dagger 2需要RUNTIME保留(这是Kotlin中的默认保留,因此无需明确指定)。