繁体   English   中英

Dagger2如何基于Java类进行注入?

[英]Dagger2 How can I inject based on a java class?

我有一个带有一堆类的枚举,这些类当前正在使用Class对象上的newInstance()方法创建。 我想在这里开始使用依赖注入。

使用原始的匕首,我可以说是ObjectGraph#get(item.getClazz()) 有没有办法用Dagger2达到类似的目的? (我真的很喜欢dagger2界面,不希望不必回到dagger1)。

Dagger 2没有任何通过Class对象获取实例的内置机制。

给定您的示例代码,我猜您的枚举看起来像:

enum Item {
  ONE(A.class),
  TWO(B.class);

  private final Class<?> clazz;
  private Item(Class<?> clazz) { this.clazz = clazz; }
  Class<?> getClazz() { return clazz; }
}

为了获得与ObjectGraph所建议的版本行为类似的调用代码,您需要一个@Component其中包含Item引用的每种类型的方法。

@Component
interface MyComponent {
  A getA();
  B getB();
}

现在,您可以更新Item以委托给MyComponent,而完全不需要类文字。

enum Item {
  ONE {
    @Override A getObject(MyComponent component) {
      return component.getA();
    } 
  },
  TWO {
    @Override B getObject(MyComponent component) {
      return component.getB();
    }
  };

  abstract Object getObject(MyComponent component);
}

现在,您可以只调用item.getObject(myComponent)以获得相同的效果,而不是ObjectGraph#get(item.getClazz())

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM