1

当有加号图形时,我怀疑哪个是在匕首中设置注入属性(而不是注释)的正确位置。

我们有这样的场景:

@Module(injects = ClassWithInjects.class, complete = false)
public final class BaseModule {

  @Provides
  DependencyA providesA() { return new A(); }
  @Provides
  DependencyB providesB() { return new B(); }
  ...
}

class ClassWithInjects {
  @Inject
  A a;
  @Inject
  B b;
}

这样做时效果很好:

ObjectGraph graph = ObjectGraph.create(new BaseModule()).plus(new Object[0]); // no modules used to plus by default
graph.inject(new ClassWithInjects());

之后我们添加了一个新模块,从那一刻起,它是唯一应该提供 B 的模块:

@Module(injects = ClassWithInjects.class, complete = false)
public final class BaseModule {

  @Provides
  DependencyA providesA() { return new A(); }
  ...
}

@Module(addsTo = BaseModule.class, complete = false)
public final class AdditionalModule {
  @Provides
  DependencyB providesB() { return new B(); }
}

class ClassWithInjects {
  @Inject
  A a;
  @Inject
  B b;
}

那是失败的

IllegalStateException 类 ClassWithInjects 不需要 B 的绑定

这样做时:

ObjectGraph graph = ObjectGraph.create(new BaseModule()).plus(new AdditionalModule());
graph.inject(new ClassWithInjects());

当我移动它时它工作

注入 = ClassWithInjects.class

属性从 BaseModule 到 AdditionalModule。

那么,在使用 plus'ed 模块时,我应该在哪里放置注入属性?它是否必须位于在调用 .plus(...) 时用作参数的模块之一中?

根据this github issue,我必须将注入放在具有实例绑定的模块中,我尝试将依赖项注入(上面示例中的ClassWithInjects)但是,如果我有几个模块提供实现所有所需的不同绑定怎么办该实例的依赖关系?我是否必须创建一个包含所有其他模块的模块并将注入属性放在那里?

4

1 回答 1

0

您是否在这里看到过 Android 示例:https ://github.com/square/dagger/tree/master/examples/android-activity-graphs/src/main/java/com/example/dagger/activitygraphs

将该设置与您所拥有的设置进行比较,“注入”是在添加的模块上定义的。我认为当前的限制是,如果您有多个模块,则必须在每个加模块上定义它们。

于 2013-11-20T17:04:01.233 回答