首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Dagger2子组件模块覆盖

Dagger2子组件模块覆盖
EN

Stack Overflow用户
提问于 2016-05-28 02:08:24
回答 2查看 1.5K关注 0票数 2

ApplicationComponent.java

代码语言:javascript
复制
@Component(modules = SomeModule.class)
@ApplicationScope
public interface ApplicationComponent {
    // stuff
    ActivityComponent activityComponent();
}

ActivityComponent.java

代码语言:javascript
复制
@Subcomponent(modules = AnotherModule.class)
@ActivityScope
public interface ActivityComponent {
    // stuff
    void inject(MainActivity mainActivity);
}

可以使用像this这样的东西覆盖SomeModule。但是AnotherModule怎么样呢?

一种解决方案是分离这两个组件,但是如果我想重用来自父组件的一些绑定怎么办?

编辑:

MainActivity.java

代码语言:javascript
复制
onCreate(Bundle bundle) {
    getApplicationComponent().getActivityComponent().inject(this);
}

edit2:

ActivityRyle.java

代码语言:javascript
复制
init() {
    application.setComponent(DaggerApplicationComponent.builder()
                    .someModule(new TestSomeModule(application))
                    .build();
}

edit3:我尽量避免在Application (创建主要组件的地方)中连接太多的东西。

EN

回答 2

Stack Overflow用户

发布于 2016-05-28 02:21:28

你也可以直接覆盖这个模块。

请记住,如何创建子组件:

代码语言:javascript
复制
public interface ApplicationComponent {

    ActivityComponent activityComponent(/*needed modules go here*/);
}

因此,除非模块有无参数的构造器,否则必须将它们作为参数放入方法声明中。

如果您希望能够使用无参数构造函数覆盖模块,则必须将它们添加到您的方法签名中:

代码语言:javascript
复制
public interface ApplicationComponent {

    ActivityComponent activityComponent(AnotherModule module);
}

在你的测试中,你只需要提供你的子类。

票数 1
EN

Stack Overflow用户

发布于 2016-05-28 02:49:59

您需要将模块声明为子组件工厂方法的输入参数。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37489856

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档