使用枚举参数辅助注射

时间:2013-06-17 22:20:24

标签: gwt guice gwtp

我有多个presenter小部件,我使用辅助注射从clientfactory中提取。

public interface FieldFactory {

    TextboxPresenterWidget createTextBoxWidget(Field field);
    BooleanPresenterWidget createBooleanWidget(Field field);
        ...
}

这当前工作正常,但我想要做的是能够创建我想要的小部件,而不必专门调用它,而是能够传入它的类型作为注入的一部分,以获得正确的PresenterWidget

每个'Field'对象都有一个枚举属性,它的类型是什么......我想知道是否有办法,我将如何做到这一点。

最好我的工厂看起来更像这样:

public interface FieldFactory {

    TextboxPresenterWidget create(Field field, FieldType type);
    BooleanPresenterWidget create(Field field, FieldType type);
        ...
}

这会使我的impl代码更像:

...
for(Field field : fields) {
    addToSlot(SLOT_NAME, fieldFactory.create(field, field.getType()));
}
...

感谢您的任何意见,非常感谢!

1 个答案:

答案 0 :(得分:0)

无论如何,枚举值上的switch…case必须在某个地方完成,虽然我可以理解你更愿意为它生成而不是手工编码,但GIN不会这样做而且它可能需要比开关代码本身更多(或至少同样多)的配置代码。

那么一个手写的工厂如何按照辅助注入工厂呢?

public class FieldFactory {
  @Inject AssistedFieldFactory factory;

  public PresenterWidget create(Field field) {
    switch (field.getType()) {
    case TEXTBOX:
      return factory.createTextBoxWidget(field);
    case BOOLEAN:
      return factory.createBooleanWidget(field);
    default:
      throw new IllegalArgumentException();
    }
  }
}