Guiceを使用して小さなWebフレームワークを開発しています。初期化されると、getControllerClasses()メソッドを公開するRouterオブジェクトがあります。Guiceを使用してそれらをbind()するには、動的に返されたすべてのクラスをループする必要があります。
ルーターをバインドします:
bind(IRouter.class).to(Router.class);
しかし、モジュールでバインドされたルーターインスタンスを取得するにはどうすればよいのでしょうか。そのため、getControllerClasses()メソッドによって返されるクラスをバインドすることもできます。
モジュールでルーターインスタンスを取得できる唯一の方法は、このインスタンスを最初のモジュールでバインドしてから、セッターで@Injectを使用して2番目のモジュールに注入することです。
モジュール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のバインダーインスタンスがNULLのようです。
動的に取得されたクラスをバインドするにはどうすればよいですか?それらのクラスは、すでにバインドされているオブジェクトによって返されますか?