注入一个实例Kotlin&Guice失败
我有以下代码:
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
forms提供给注入器? (这是第一个问题。)
但是,如果我更改Context
看起来像这样:
class Context { @get:Inject lateinit var property: String }
测试突然成功了。 如果我已经将Context
类绑定到我创建的实例上,我不明白为什么Guice正在查看Context
的注释。 有谁能告诉我这里发生了什么?
Guice自动注入在绑定语句中传递给toInstance()
实例,所以Context
中的@Inject
注释是相关的。
在你的例子中,Guice不是创建Context
的新实例,而是用空字符串注入实例的字段。
当你注解这个属性时,Kotlin把注释放在这个字段上。 当你注释吸气剂时,Guice忽略它。