用Guice注入具有不同参数的相同元件

问题描述:

我有一个代表图形元件的类。该组件显示数据库中的数据。用Guice注入具有不同参数的相同元件

现在我有一些仪表板,其中有12我的组件上面。当然,我想重复使用这个组件!所以我想,我可以使用具有参数的自定义注释并将参数传递给提供者。我发现了一些在*上的黑客(http://*.com/questions/5704918/custom-guice-binding-annot ...)但说实话,我没有找到任何文档如何实现我的自定义界面的AnnotationImpl 。

我不认为,AssistedInject是我在这里需要的,因为我不喜欢通过AssistedInjection向我的构造函数注入12x相同类的想法。

对我来说No-Go是为一个不同的参数编写一个Interface和12个实现类。

有没有人有我的问题的想法?

我并不完全清楚你想要做什么,但我认为辅助注射可能适合你。你不能创建一个ComponentFactory,然后在它的create方法中指定你需要的这个参数吗?你甚至都不需要创建一个具体实现工厂作为吉斯会为你做的,你可以像这样指定它:

install(new FactoryModuleBuilder().build(ComponentFactory.class)); 

ComponentFactory应该是这样的:

public interface ComponentFactory { 
    Component create(ParameterType parameter); 
} 

而且组件本身是这样的:

public class Component { 
    @Inject 
    public WebClient(@Assisted ParameterType parameter, OtherService service) { 
     // etc... 
    } 
} 

然后传递ComponentFactory到您的仪表盘,它可以创建(容易),它想要的任何组件。

+1

你是对的。我在你的帖子后想过它,这对于辅助注射是一个明确的场景。感谢您指点我正确的方向。 对于你的绑定符号的一个建议:你可以用'install(新FactoryModuleBuilder()。build(MyFactory.class))绑定一个Factory;'我个人认为这个符号更简洁:) – 2011-04-26 21:33:57

+0

我更喜欢这种语法。我还没有使用Guice 3.0,但也许是时候升级! – alpian 2011-04-26 21:40:44