如何在调试版本中包含Dagger Debug SubModule?

时间:2017-10-02 01:47:02

标签: android dagger-2 dagger

我在我的应用程序中创建了一个Dagger AppComponent,如下所示

protected AppComponent createComponent() {
    return DaggerAppComponent.builder().appModule(new AppModule(this)).build();
}

AppModule包含一个`FeatureModule,如下所示。

@Module(includes = {FeatureModule.class})
public class AppModule {
   // All the provides here
}

现在,我计划在FeatureModule中为Debug构建一个单独的项目。所以我创建了继承自FeatureModule

的FeatureDebugModule
@Module
public class FeatureDebugModule extends FeatureModule {

    @Override
    protected void debugBuildSpecificConfig() {
         // Something specific to debug
    }
}

有了这个,我还创建了从AppModule继承的AppDebugModule

@Module(includes = {FeatureDebugModule.class})
public class AppDebugModule : AppModule {
}

最后,我让AppDebugApplication设置Dagger组件如下

protected AppComponent createComponent() {
    return DaggerAppComponent.builder().appModule(new AppDebugModule(this)).build();
}

不知何故,代码在我的调试模式下不访问FeatureDebugModule,但仍然在FeatureModule代码上。我做错了什么?

1 个答案:

答案 0 :(得分:0)

显然,对于Dagger,加载的模块基于组件模块中定义的内容。因此在Debug中,我使用如下。

@Singleton
@Component(modules = {AppDebugModule.class})
public interface AppDebugComponent extends AppComponent {
    // Inject
}

创建匕首组件

DaggerAppDebugComponent.builder().appDebugModule(new AppDebugModule(this)).build();

在发布中,我使用如下

@Singleton
@Component(modules = {AppReleaseModule.class})
public interface AppReleaseComponent extends AppComponent {
    // Inject
}

创建匕首组件

DaggerAppReleaseComponent.builder().appReleaseModule(new AppReleaseModule(this)).build();