实现工厂:ObjectGraph.get(T.class)与Lazy <t> </t>

时间:2014-07-22 21:36:21

标签: dagger

我有一个依赖于调用堆栈变量的工厂来选择要构建的类型。我希望为构建的实例及其后代提供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;      
    }
  }
}

优点,缺点,其他选择?

1 个答案:

答案 0 :(得分:0)

您应该更喜欢第二个,因为它明确说明了它的依赖关系,而不是要求整个ObjectGraph。但您可能需要注入Provider<T>,而不是Lazy<T>,以便与ObjectGraph.get的行为相匹配。