【发布时间】:2017-01-25 06:44:20
【问题描述】:
我有以下代码:
class Test {
private val context = Context().apply {
property = "foo"
}
private val injector = Guice.createInjector(Module { it.bind(Context::class.java).toInstance(context) })
@Test
fun `service received correct context`() {
assertThat(injector.getInstance(Service::class.java).context.property, equalTo("foo"))
}
}
class Service @Inject constructor(val context: Context)
class Context {
@Inject lateinit var property: String
}
运行它时,测试失败,抱怨(正确地)空字符串不是“foo”。但是为什么 Guice 不使用我精心创建并以Module 的形式提供给注入器的实例? (这是第一个问题。)
但是,如果我将 Context 更改为如下所示:
class Context {
@get:Inject lateinit var property: String
}
测试突然成功了。如果我将Context 类绑定到我创建的实例,我完全不明白为什么Guice 会查看Context 的注释。谁能告诉我这是怎么回事?
【问题讨论】: