如何通过gradle味改变Dagger模块的注射?

时间:2014-12-13 19:00:10

标签: android gradle dagger

我有一个Android / gradle项目,有两种使用Dagger的风格。这些口味有几个共同的活动,但每种口味都有一些独特的风味活动。所以,对于一种风味:

@Module(injects = {
        CommonActivity1.class,
        CommonActivity2.class,
        Flavor1Activity.class,
})
public class MyModule { ... }

而另一方:

@Module(injects = {
        CommonActivity1.class,
        CommonActivity2.class,
        Flavor2Activity.class,
})
public class MyModule { ... }

除了注入的类之外,模块是相同的。我目前只是在两个MyModule.java文件之间复制代码,这两个文件放在相应的每个flavor目录中。

我想找到一个避免在两个相同模块之间复制/粘贴代码的解决方案,理想情况下可以防止需要两次指定常见活动

我不关心解决方案是Java还是Gradle。如果有办法在Gradle中生成注释,那很好。如果有一种方法可以在Java中重构注入列表,那也没关系。我也愿意重新组织我对Dagger的方法,以完全避免这个问题。

1 个答案:

答案 0 :(得分:2)

我认为你的解决方案是添加。

如果模块的内容相同,则在默认源目录中包含基本模块实现。然后在每个风味实现中创建特定于风味的模块。

在模块注释中使用addsTo = BaseModule.class

使用此方法,您只需要在模块中定义注释,并可以重用基础实现。

你最终得到类似的东西

@Module (
        library = true
        , complete = false
)
public class BaseModule {}


@Module (
        library = true
        , complete = false
        , addsTo = BaseModule.class
        , injects = { ... }
)
public class FlavourOneModule {}

@Module (
        library = true
        , complete = false
        , addsTo = BaseModule.class
        , injects = { ... }
)
public class FlavourTwoModule {}