我正在使用Guice开发一个小型Web框架.我有一个Router对象,一旦初始化,就会公开一个getControllerClasses()方法.我必须使用Guice将所有动态返回的类循环到bind()它们.
我绑定路由器:
bind(IRouter.class).to(Router.class);
Run Code Online (Sandbox Code Playgroud)
但是,如何在Module中获取绑定的Router实例,这样我还可以绑定其getControllerClasses()方法返回的类?
我能够在模块中获取路由器实例的唯一方法是在第一个模块中绑定此实例,然后在setter上使用@Inject将其注入第二个模块:
第1单元
bind(IRouter.class).to(Router.class);
Module2 module2 = Module2();
requestInjection(module2);
install(module2);
Run Code Online (Sandbox Code Playgroud)
第2单元
@Inject
public void setRouter(IRouter router)
{
Set<Class<?>> controllerClasses = router.getControllerClasses();
for(Class<?> controllerClass : controllerClasses)
{
bind(controllerClass);
}
}
Run Code Online (Sandbox Code Playgroud)
调用该方法并初始化Router实例,但控制器类的绑定失败!在Guice生命周期的这一步,似乎module2 的binder实例是NULL.
如何绑定动态获取的类,这些类是否已由已绑定的对象返回?