当有加号图形时,我怀疑哪个是在匕首中设置注入属性(而不是注释)的正确位置。
我们有这样的场景:
@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)但是,如果我有几个模块提供实现所有所需的不同绑定怎么办该实例的依赖关系?我是否必须创建一个包含所有其他模块的模块并将注入属性放在那里?