【问题标题】:Inject a Class<T> with GIN用 GIN 注入一个 Class<T>
【发布时间】:2011-10-28 22:15:05
【问题描述】:

有没有办法在杜松子酒中注入一个类类型Class&lt;T&gt;?我似乎无法让它工作,例如:

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);

谢谢

【问题讨论】:

    标签: java gwt dependency-injection guice gwt-gin


    【解决方案1】:

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

    【讨论】:

    • 对不起,我想你误解了我,做了一个编辑澄清。我不需要反射,只想将 Class 绑定到 Foo.getClass()。
    【解决方案2】:

    如果这是普通的 Guice(而不是 Gin),您可以这样做:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多