我正在尝试动态生成一组事件处理程序(使用com.google.gwt.core.ext.Generator
子类)。整个生成过程工作正常,我生成的处理程序通过setter注入接受EventBus(@Inject注释),整个想法是这些自动生成的处理程序在引入的(注入)EventBus中注册自己。问题是所有这些处理程序必须以某种方式实例化。 GIN对它们一无所知,直到它们被绑定在GIN模块中;如下所示:
bind(MyDynamicallyGeneratedHandler.class).asEagerSingleton();
此代码的问题是我还必须生成gin模块(它将包含所有bind(...)指令)。它运行良好,但我无法将生成的模块(@Inject it)安装到另一个未生成的模块中,以便执行其绑定指令(作为安装的结果(MyDynamicModule.class))。我尝试了静态注入和提供者的肮脏技巧 - 都没有成功。
有没有办法配置动态生成的GIN模块?或者有没有办法实例化动态生成的处理程序,以便进行setter注入(以及事件总线注册)?
以下是示例代码段:
// it is standard interface
public interace DynamicHandler {
@Inject
void setEventBus(EventBus eventBus);
}
// one of dynamically generated handlers
// where (how) to instantiate me?
public class MyHandler implements DynamicHandler {
@Inject
AnotherHandlerSpecificComponent component
void setEventBus(EventBus eventBus) {
eventBus.register(...); // register myself
}
}
需要注意的是,所有这些动态生成的处理程序都有一些其他依赖项@Injected(除了EventBus)。这些依赖项(它们的类型)特定于处理程序(在上面的示例中为AnotherHandlerSpecificComponent
)。所以我需要做的是以触发GIN注入的方式实例化这些处理程序(例如,我不能手动注入依赖项)。
提前感谢任何线索。我完全被困了......
答案 0 :(得分:0)
如何为工厂注入处理程序的依赖项并尝试实例化并注册实际处理程序(例如通过反射或扫描文件系统?)