下面的代码第一次编译但在第二次构建时失败:
错误: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
答案 0 :(得分:1)
请尝试删除此行@Retention(AnnotationRetention.SOURCE)
。据我所知,Dagger 2需要RUNTIME
保留(这是Kotlin中的默认保留,因此无需明确指定)。