Dagger2如何基于java类注入?

时间:2015-07-13 23:01:25

标签: java dependency-injection dagger dagger-2

我有一个包含许多类的枚举,这些类目前是使用newInstance()对象上的Class方法创建的。我想在这里开始使用依赖注入。

用原来的匕首我可以说ObjectGraph#get(item.getClazz())。有没有办法实现与Dagger2类似的东西? (我真的很喜欢dagger2接口,不想再回到dagger1)。

1 个答案:

答案 0 :(得分:2)

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建议的版本类似的调用代码,您需要@ComponentItem引用的每种类型提供方法。

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

现在,您可以拨打ObjectGraph#get(item.getClazz())而不是item.getObject(myComponent),而不是#include <iostream> #include <cstdio> using namespace std; int val1; int val2; int val3; int sortArray[3]; int main(){ printf("Enter three integer values.\n"); printf("Please enter integer 1: "); cin >> val1; printf("Please enter integer 2: "); cin >> val2; printf("Please enter integer 3: "); cin >> val3; //Checks val1 status if (val1 > val2, val3) { sortArray[1] = val1; } if (val1 > val2, val1 < val3){ sortArray[1] = val3; sortArray[2] = val1; sortArray[3] = val2; } if (val1 > val3, val1 < val2){ sortArray[1] = val2; sortArray[2] = val1; sortArray[3] = val3; } //checks val2 status if (val2 > val1, val3){ sortArray[1] = val2; } if (val2 > val1, val2 < val3){ sortArray[1] = val3; sortArray[2] = val2; sortArray[3] = val1; } if (val2 > val3, val2 < val1){ sortArray[1] = val1; sortArray[2] = val2; sortArray[3] = val3; } //checks val3 status if (val3 > val1, val2){ sortArray[1] = val3; } if (val3 > val1, val3 < val2){ sortArray[1] = val2; sortArray[2] = val3; sortArray[3] = val1; } if (val3 > val2, val3 < val1){ sortArray[1] = val1; sortArray[2] = val3; sortArray[3] = val2; } printf("Values sorted are: %d, %d, %d", sortArray[1], sortArray[2], sortArray[3]); }

相关问题