我有一个Guice Module提供一个List<String>使用@Provides方法。 class TestModule() : Module { override fun configure(binder: Binder) {} @Provides fun getStrings(): List<String> = listOf("foo", "bar") } class Test { @Test fun `provider can not deliver`() { val injector = Guice.createInjector(TestModule()) injector.getInstance(object : Key<List<String>>() {}) } } 但是,测试失败: 1) No implementation for java.util.List<? extends java.lang.String> was bound. while locating java.util.List<? extends java.lang.String> […]
我有以下代码: 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 […]
我想设置Guice绑定,所以我创建了一个完美的Java模块: public class CrashLoggerModule extends AbstractModule { @Override public void configure() { bind(CrashLogger.class).to(ConcreteCrashLogger.class); } } 然后我把这个代码转换成Kotlin: public class CrashLoggerModule : AbstractModule() { override fun configure() { bind(javaClass<CrashLogger>()).to(javaClass<ConcreteCrashLogger>()) } } 不幸的是,这个类的Kotlin版本不再工作了。 发生这种情况是因为Kotlin将其内部方法称为public fun <A, B> A.to(that: B): Pair<A, B>而不是LinkedBindingBuilder<T>.to(Class<? extends T> c) Guice绑定没有正确设置。 我怎样才能明确指出,我想使用类方法,而不是扩展功能?