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
(创建主要组件的位置)中布线过多的东西。
答案 0 :(得分:1)
您需要将模块声明为子组件工厂方法的输入参数。
答案 1 :(得分:0)
您也可以覆盖模块。
请记住,创建子组件的方式:
public interface ApplicationComponent {
ActivityComponent activityComponent(/*needed modules go here*/);
}
因此,除非你有模块的no-args构造函数,否则你必须将它们作为参数放在方法声明中。
如果您希望能够使用no-arg构造函数覆盖模块,则必须将它们添加到方法签名中:
public interface ApplicationComponent {
ActivityComponent activityComponent(AnotherModule module);
}
在你的测试中,你只需提供你的子类。