【发布时间】:2018-05-15 06:26:35
【问题描述】:
我用https://google.github.io/dagger/multibindings中的例子
模块 A
@Module
object MyModuleA {
@Provides
@IntoSet
fun provideOneString(): String {
return "ABC"
}
}
模块 B
@Module
object MyModuleB {
@Provides
@ElementsIntoSet
fun provideSomeStrings(): Set<String> {
return HashSet<String>(Arrays.asList("DEF", "GHI"))
}
}
组件
@Component(modules = [ MyModuleA::class, MyModuleB::class])
interface MyComponent {
fun strings(): Set<String>
}
测试
@Test
fun testMyComponent() {
val myComponent = DaggerMyComponent.builder().build()
println("${myComponent.strings()}")
}
必须设置 MyModuleA 时显示错误,但是将模块从对象更改为类可以正常工作。
@Module
class MyModuleA {
@Provides
@IntoSet
fun provideOneString(): String {
return "ABC"
}
}
@Module
class MyModuleB {
@Provides
@ElementsIntoSet
fun provideSomeStrings(): Set<String> {
return HashSet<String>(Arrays.asList("DEF", "GHI"))
}
}
@IntoSet 注解在 kotlin 对象中不起作用?
【问题讨论】:
-
尝试用
@JvmStatic标记object模块中的功能,它应该可以工作 -
它有效,我看看构建的代码。 Dagger 似乎创建了对象的实例,然后 Dagger 得到了 null。