我有一个UI组件,将在应用程序中的多个UI模块中使用。
我想将要注入一个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也需要注入,所以我不能简单地在那里创建实例。完全不确定这是否有效。
我想知道实现这一目标的标准方法是什么?
答案 0 :(得分:1)
另一个选择可能是为每个模块使用child injector。
这将允许您在每个模块中绑定UIComponentA
的差异实例。将它们绑定在子进样器而不是父进程中。然后,您需要确保所有模块的依赖项都是从正确的子注入器构建的,可能是通过确保从正确的位置加载每个模块的根目录。
答案 1 :(得分:0)
因为UICompoenetAImpl也需要注入,所以我不能简单地在那里创建实例。
我认为你可以在那里创建UIComponentAImpl并绑定到Instance。当你这样做时 - 其他bean将被注入UIComponentAImpl。请参阅我的示例here。