如何使用GinFactoryModuleBuilder从Google Gin获取扩展的SubClass?

时间:2015-01-08 17:45:41

标签: java gwt dependency-injection guice gin

GinFactoryModuleBuilder类注释说明如下:

  

与常规Guice Assisted Inject不同,在Gin中,返回类型   在你的工厂没有使用常规注射器进一步解决   组态。这意味着在下面的例子中你仍然会   得到一只鸡而不是一只公鸡:

interface Animal {}
 public class Chicken implements Animal {}
 public class Rooster extends Chicken {}
 interface AnimalFactory {
   Animal getAnimal();
 }
 ...
 protected void configure() {
   bind(Chicken.class).to(Rooster.class);
   install(new GinFactoryModuleBuilder()
       .implement(Animal.class, Chicken.class)
       .build(AnimalFactory.class));
 }

有没有办法让杜松子酒中的鸡蛋?怎么样:

install(new GinFactoryModuleBuilder()
        .implement(Animal.class, Rooster.class)
        .build(AnimalFactory.class));

在我的代码中:

@Inject
AnimalFactory f;
Animal rooster = f.getAnimal();

如何制作公鸡?

如何使用GinFactoryModuleBuilder从Google Gin获取扩展SubClass?

1 个答案:

答案 0 :(得分:1)

您可以从configure方法中删除所有内容,并仅保留以下内容:

install(new GinFactoryModuleBuilder()
  .implement(Animal.class, Rooster.class)
  .build(AnimalFactory.class));

然后像你一样使用工厂从工厂获得Rooster的实例。

或者,您可以更改工厂方法以返回Rooster&按如下方式更改configure,并像以前一样使用工厂: -

interface AnimalFactory {
   Rooster getAnimal();
 }
 ...
 protected void configure() {
   install(new GinFactoryModuleBuilder().build(AnimalFactory.class));
 }