我的问题
我正在从Tapestry IOC迁移到Guice,并且我希望Guice将所有未解决的注入请求转发到Tapestry IOC。例如,这种情况适用于个别情况:
bind(DSLContext::class.java).toProvider (Provider {
tapestryRegistry.getService(DSLContext::class.java)
})
这样,当要求Guice提供DSLContext时,它将从挂毯注册表中获取由挂毯构造的实例。
我的问题
我想一般地执行此操作,本质上类似Provider.get(),但它应该是Provider.get(Class)。 我该如何用Guice做到这一点?
答案 0 :(得分:1)
我从未做过,所以这可能是一个错误的答案,但是您可以在其中使用https://github.com/google/guice/wiki/CustomInjections:
使用TypeListener来测试注入器是否具有guice绑定的字段类型,而不是像示例一样查看它们的注释。 (例如在字段中检查@injectlogger的示例),您需要检查注射器是否具有约束力
实施成员注入器以从挂毯中设置字段值,而不是自己创建对象。 (示例创建并设置了一个新的记录器实例)
在绑定侦听器时,您必须在提供注射器和挂毯实例的同时绑定到实例。
答案 1 :(得分:0)
因此我发现可以使用Tapestry的“服务活动记分板”服务来确定哪些服务绑定到Tapestry IOC。
tapestryRegistry.getService(ServiceActivityScoreboard::class.java)
.serviceActivity.forEach { serviceActivity ->
bindOnce(serviceActivity.serviceInterface)?.toProvider( Provider {
tapestryRegistry.getService(serviceActivity.serviceInterface)
})
}
bindOnce这里只是一个模块本地方法,可确保接口未绑定两次。