我有一个疑问,当有加号图时,哪个是在匕首中设置injects属性(不是注释)的正确位置。
我们有这种情况:
@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类不需要B的绑定 ClassWithInjects
这样做:
ObjectGraph graph = ObjectGraph.create(new BaseModule()).plus(new AdditionalModule());
graph.inject(new ClassWithInjects());
当我移动
时它会起作用injects = ClassWithInjects.class
从BaseModule到AdditionalModule的属性。
那么,在使用plus'ed模块时,我应该在哪里放置injects属性?它是否必须位于调用.plus(...)的参数模块之一?
根据this github issue,我必须将注入放在具有实例绑定的模块中,我尝试将依赖项注入(上例中的ClassWithInjects)但是,如果我有几个模块提供不同的内容,该怎么办?需要绑定才能实现该实例的所有依赖关系?我是否必须创建一个包含所有其他模块并放入injects属性的模块?
答案 0 :(得分:0)
您是否在此处看过Android示例:https://github.com/square/dagger/tree/master/examples/android-activity-graphs/src/main/java/com/example/dagger/activitygraphs
将该设置与您拥有的设置进行比较,“注入”是在加上的模块上定义的。我认为目前的限制是,如果你有多个,你必须在每个加号模块上定义那些。