[英]Dagger2 Subcomponent module override
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);
}
SomeModule
可以使用像被重写此。 但是AnotherModule
呢?
一种解决方案是将 2 个组件分开,但是如果我想重用来自父级的一些绑定怎么办?
编辑:
MainActivity.java
onCreate(Bundle bundle) {
getApplicationComponent().getActivityComponent().inject(this);
}
编辑2:
ActivityRyle.java
init() {
application.setComponent(DaggerApplicationComponent.builder()
.someModule(new TestSomeModule(application))
.build();
}
编辑3:我试图避免在Application
(创建主要组件的地方)中连接太多东西。
您也只需覆盖该模块。
请记住,您如何创建子组件:
public interface ApplicationComponent {
ActivityComponent activityComponent(/*needed modules go here*/);
}
因此,除非您没有模块的无参数构造函数,否则您必须将它们作为参数放在方法声明中。
如果您希望能够使用无参数构造函数覆盖模块,则必须将它们添加到您的方法签名中:
public interface ApplicationComponent {
ActivityComponent activityComponent(AnotherModule module);
}
在您的测试中,您只需提供您的子类。
您需要将该模块声明为子组件工厂方法的输入参数。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.