2014-12-13 39 views
1

我有一個Android/gradle項目,有兩種使用Dagger的風格。這些口味有幾個共同的活動,但每種口味都有一些獨特的風味活動。因此,對於一個味:如何通過gradle flavor更改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中生成註釋,那很好。如果有一種方法可以在Java中重構注入列表,那也沒關係。我也願意重新組織我的匕首方法,以完全避免這個問題。

回答

2

我認爲你的解決方案是addsTo。

如果模塊的內容相同,那麼在默認源目錄中包含基本模塊實現。然後在每個風味實現中創建你的風味特定模塊。

在模塊註釋中使用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 {} 
+0

這正是我要找的。我做的唯一修改是從每個模塊中刪除庫和完整的標誌。謝謝! – 2014-12-16 20:20:18