匕首:如何减少注射维护?

时间:2014-04-30 15:38:15

标签: android dagger

我正在构建一个广泛使用Dagger进行依赖注入的Android应用程序。

我已将我的应用程序分成多个逻辑包,并且我尝试将所有内容拆分为多个模块,这些模块都包含在“主”模块中,以便分离关注点。

但是,现在我遇到了一个问题,我必须为每个模块维护injects {...}列表,并且它变得非常繁琐且容易出错。

例如

@Module(
        injects = {
                ThingA.class
        },
        complete = false,
        library = false
)
public class FeatureAModule {
    @Provides
    public FeatureA providesFeature(FeatureAImpl featureA){
        return featureA;
    }
}

@Module(
        injects = {
                ThingB.class,
                AnotherThingB.class
        },
        complete = false,
        library = false
)
public class FeatureBModule {
    @Provides
    public FeatureB providesFeature(FeatureBImpl feature){
        return feature;
    }
}

@Module(
        injects = {
        },
        complete = true,
        library = false,
        includes = { FeatureAModule.class, FeatureBModule.class }
)
public class ApplicationModule {

}

如果我在类中添加@Injects注释但忘记将其添加到我的注入列表中,我将获得运行时异常。如果我有一个使用2个模块的功能的类,我通常会将注入添加到两个模块中,但是如果我忘记了一个模块,那么我会从其中一个模块中删除它,以确保它不会在其他任何地方使用否则我就会遇到运行时异常。

基本上,我试图找出一种万无一失的方法,当我尝试注入某些东西(理想情况下是在匕首编译器级别)时,永远不会有“无注入”。

1 个答案:

答案 0 :(得分:0)

我遇到了同样的问题...... 我的解决方案是将我的应用程序的组件分组为

所属的功能

然后我为每个功能创建了一个单独的模块,其中包含所有需要在注入列表中注入的类。

这样整个事情就变成了可管理的,但整个注入列表应该已经过时了