【发布时间】:2018-07-04 16:29:45
【问题描述】:
我有这个依赖:
@Singleton
class SpiceMix @Inject constructor(@field:[Named("oregano")] private val oregano: Spice,
@field:[Named("sage")] private val sage: Spice,
@field:[Named("rosemary")] private val rosemary: Spice)
还有一个模块来实现它的依赖:
@Module
class SpiceModule {
@Provides
@Named("oregano")
@Singleton
fun provideOregano(): Spice = Oregano()
@Provides
@Named("sage")
@Singleton
fun provideSage(): Spice = Sage()
@Provides
@Named("rosemary")
@Singleton
fun provideRosemary(): Spice = Rosemary()
然后将SpiceMix 注入我的应用程序的各个位置。
但是,这不能编译,我得到一个错误:
Spice cannot be provided without an @Provides-annotated method
我认为@Named 注释在我的构造函数签名中不太适用。我不太确定如何让它发挥作用。
注意:如果我放弃命名注释并将构造函数参数的类型更改为它们的具体形式,这编译得很好。但是,Spice 是一个接口,我在测试中需要它来模拟目的。
我能做什么?
【问题讨论】:
标签: android dependency-injection kotlin dagger-2