2012-03-06 56 views
1

我有一个将在应用程序中的多个UI模块中使用的UI组件。如何让Guice将带注释的注入绑定到单个实例

我想注释在一个UI模块中注入到其他几个类的UI组件是单例,而不是整个应用程序中的单例。为了使每个UI模块使用UI组件,使用了一个且仅有一个UI组件实例。

我从Guice文档找不到这个直接的解决方案。所以我想也许我可以使用注释区分这些实例? 在模块A中说,我用Named("ModuleA")注释了UI组件的所有注入;并在模块B中使用Named("ModulaB")。而在配置上,我试图用这样的:

this.bind(UIComponentA.class) 
    .annotatedWith(Names.named("ModulaA")) 
    .to(UIComponentAImpl.class).in(Singleton.class); 

this.bind(UIComponentA.class) 
    .annotatedWith(Names.named("ModulaB")) 
    .to(UIComponentAImpl.class).in(Singleton.class); 

因为UICompoenetAImpl还需要注入,所以我不能简单地创建实例那里。完全不知道这是否有效。

我想知道完成此操作的标准方法是什么?

回答

1

另一个选项可能是为每个模块使用child injector

这将允许您在每个模块中绑定UIComponentA的差异实例。将它们绑定在子注入器而不是父级注入器中。然后您需要确保所有模块的依赖关系都是从正确的子注入器构建的,可能通过确保每个模块的根从正确的位置加载。

0

因为UICompoenetAImpl还需要注入,所以我不能简单地创建实例那里。

我想你可以在那里创建UIComponentAmpl并绑定到实例。当你这样做时 - 其他的bean将被注入到UIComponentAmpl中。请参阅我的示例here

+0

感谢您的答案,但正如我所说的UICompoenentAImpl也有依赖性,需要由Guice注入。 – Wudong 2012-03-06 12:11:15

+0

如果你手动创建UICompoenentAImpl并通过bind(...)。toInstance()把它添加到guice容器中,你是否检查过这些依赖项没有被注入?什么样的依赖关系? – 2012-03-06 13:13:59

+0

不幸的是它有几个依赖关系,也需要由Guice注入。手动创建实例将非常麻烦。 – Wudong 2012-03-06 14:07:26

相关问题