ApplicationComponent.java
@Component(modules = SomeModule.class)
@ApplicationScope
public interface ApplicationComponent {
// stuff
ActivityComponent activityComponent();
}ActivityComponent.java
@Subcomponent(modules = AnotherModule.class)
@ActivityScope
public interface ActivityComponent {
// stuff
void inject(MainActivity mainActivity);
}可以使用像this这样的东西覆盖SomeModule。但是AnotherModule怎么样呢?
一种解决方案是分离这两个组件,但是如果我想重用来自父组件的一些绑定怎么办?
编辑:
MainActivity.java
onCreate(Bundle bundle) {
getApplicationComponent().getActivityComponent().inject(this);
}edit2:
ActivityRyle.java
init() {
application.setComponent(DaggerApplicationComponent.builder()
.someModule(new TestSomeModule(application))
.build();
}edit3:我尽量避免在Application (创建主要组件的地方)中连接太多的东西。
发布于 2016-05-28 02:21:28
你也可以直接覆盖这个模块。
请记住,如何创建子组件:
public interface ApplicationComponent {
ActivityComponent activityComponent(/*needed modules go here*/);
}因此,除非模块有无参数的构造器,否则必须将它们作为参数放入方法声明中。
如果您希望能够使用无参数构造函数覆盖模块,则必须将它们添加到您的方法签名中:
public interface ApplicationComponent {
ActivityComponent activityComponent(AnotherModule module);
}在你的测试中,你只需要提供你的子类。
发布于 2016-05-28 02:49:59
您需要将模块声明为子组件工厂方法的输入参数。
https://stackoverflow.com/questions/37489856
复制相似问题