我有一个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的方法,以完全避免这个问题。
答案 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 {}