我有一个依赖于调用堆栈变量的工厂来选择要构建的类型。我希望为构建的实例及其后代提供Dagger注入,而不必事先实际构建所有可能的实例,而只是工厂实际选择的实例。我提出了以下备选方案:
使用ObjectGraph.get()
class Factory {
FooInterface create(FooTypeEnum type) {
switch(type) {
case TYPE_A:
return objectGraph.get(FooA.class);
break;
case TYPE_B:
return objectGraph.get(FooB.class);
break;
}
}
}
使用Lazy (工厂本身可以由Dagger注入)
class Factory {
@Inject Lazy<FooA> fooA;
@Inject Lazy<FooB> fooB;
FooInterface create(FooTypeEnum type) {
switch(type) {
case TYPE_A:
return fooA.get();
break;
case TYPE_B:
return fooB.get();
break;
}
}
}
优点,缺点,其他选择?
答案 0 :(得分:0)
您应该更喜欢第二个,因为它明确说明了它的依赖关系,而不是要求整个ObjectGraph
。但您可能需要注入Provider<T>
,而不是Lazy<T>
,以便与ObjectGraph.get
的行为相匹配。