Better Dagger Dependency Injection basierend auf Build-Typ und Geschmack?

8

Ich benutze Aproach, um Module zu liefern, die Dagger als Antwort auf diese Frage beschrieben Android Customize Workflow für Produkt-Flavors

Unser Ansatz ist ein bisschen anders - wir haben Modules in debug Buildtyp in src/debug/java und in release Buildtyp in src/release/java . Unser Hauptmodul heißt ApplicationModule und schließt alle anderen ein.

Modules in src/debug/java bietet benutzerdefiniertes Verhalten zum Debuggen, Protokollieren usw. und überschreibt ApplcationModule .

Jetzt müssen wir ein benutzerdefiniertes Verhalten basierend auf dem Anwendungsstil haben.

Was wäre der richtige Ansatz dafür?

Zum Beispiel sollten die Geschmacksrichtungen A bis C benutzerdefiniertes Verhalten bieten, während die Geschmacksrichtungen D bis F ein grundlegendes Standardverhalten bieten sollten.

Bisher habe ich solche gefunden.

  • Alle Varianten (nicht Build-Typen) haben dieselbe Klasse in src/flavorX/java/com.application.FlavorModule
  • Um Code-Duplizierung zu vermeiden, bieten nur die Varianten A bis C benutzerdefiniertes Verhalten, während andere vollständig leer sind, sodass das Projekt kompiliert wird. Und Standardverhalten ist mein Modul in src/main/java

Gibt es einen besseren Weg, um ein solches Ergebnis zu erzielen? Weil ich nicht gerne src/flavorX/java/com.application.FlavorModule mag und keine Code-Duplizierung mag ...

    
Martynas Jurkus 11.02.2014, 20:53
quelle

1 Antwort

13

Etwas kompliziert, aber so habe ich es gemacht:

Erstellen Sie eine Schnittstelle MainComponent und behalten Sie es in src / main, das sollte alles enthalten, was nicht geschmacksspezifisch ist

%Vor%

}

Erstellen Sie in jedem Flavor eine Schnittstelle, die von der obigen erbt

%Vor%

Erstellen Sie in Debug / Beta / Release die eigentliche Komponente und erweitern Sie die FlavorComponent (mit allen geschmackspezifischen Feinheiten).

%Vor%

Beachten Sie, dass Sie auch ein geschmacksspezifisches FlavorModule einfügen können, das in jedem Geschmack anders sein kann oder nicht in Release enthalten ist, während es in die Beta-Version aufgenommen wird.

Fügen Sie auch eine ComponentFactory innerhalb von Debug / Beta / Release ein und geben Sie die gemeinsame Flavour Component Interface

zurück %Vor%

und schließlich von Ihrem Application-Klassenaufruf:

%Vor%

Die Komponentenfactory gibt die Buildtyp-Komponente zurück, die die Flavor-Komponente erweitert.

    
FriendlyMikhail 13.10.2015, 03:14
quelle

Tags und Links