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