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

时间:2011-04-26 13:56:51

标签: java dependency-injection guice

我有一个代表图形组件的类。该组件显示数据库中的数据。

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

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

对我而言,No-Go是编写一个Interface和12个实现类,仅用于一个不同的参数。

有人对我的问题有所了解吗?

1 个答案:

答案 0 :(得分:4)

我不清楚你要做什么,但我认为辅助注射可能适合你。你能不创建一个ComponentFactory然后,在它的create方法中,指定你需要的这个参数?您甚至不需要创建Factory的具体实现,因为Guice会为您执行此操作,您可以像这样指定它:

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传递给您的仪表板,它可以(轻松地)创建它想要的任何组件。