繁体   English   中英

Dagger2 子组件模块覆盖

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM