使用GIN </t>注入Class <t>

时间:2011-08-17 13:01:11

标签: java gwt dependency-injection guice gin

有没有办法在杜松子酒中注入类类型Class<T>?我似乎无法让它工作,例如:

class GenericFoo<T> {

  private final Class<T> klass;

  @Inject
  public GenericFoo(Class<T> klass) {
    this.klass = klass;
  }
}

class Bar { }

在某处注入了一个实例:

..
@Inject
GenericFoo<Bar> instance;
..

和包含以下内容的GinModule:

bind(new TypeLiteral<Class<Bar>>() {}).to(Bar.class);

由于

2 个答案:

答案 0 :(得分:3)

这是不可能的。在客户端禁止反射,因此依赖注入的GIN使用deffered绑定。这意味着在编译期间,GWT会生成目标实现,这些实现在您的情况下是未知的。

答案 1 :(得分:3)

如果这是常规Guice(而不是Gin),你可以这样做:

bind(new TypeLiteral<Class<Bar>>(){}).toInstance(Bar.class);

但Gin不支持.toInstance(...)绑定。相反,您应该能够使用Provider@Provides方法,例如:

@Provides
Class<Bar> providesBarClass() {
  return Bar.class;
}