Wie kann man mit Dagger in statische Klassen injizieren?

8

Ich möchte eine Abhängigkeitsinjektion durch Dolch für ein Projekt einführen. Der folgende Code dient als Beispiel zur Beschreibung des Problems der Injektion in statische Klassen .

Die statische Methode setupTextView() wird von mehreren Klassen aufgerufen:

%Vor%

Hier ist ein Beispiel, wie die Hilfsmethode verwendet wird:

%Vor%

Die in der Hilfsmethode verwendete Verfolgung wird von der Anwendungsklasse bereitgestellt:

%Vor%

Nun möchte ich das Tracking per Dagger injizieren. Als ich den Code umstrukturierte, bemerkte ich, dass ich das Tracking-Objekt von meiner Aktivität oder Fragment an den statischen Helfer übergeben musste, da ich nicht direkt in die statische Klasse injizieren kann:

%Vor%

Das fühlt sich nicht wie ein gutes Designmuster an - da ich das TrackPoint und das Tracking Objekt übergebe. Wie würdest du das verbessern?

    
JJD 09.07.2014, 14:52
quelle

1 Antwort

13

Erstelle in deinem TextViewHelper ein statisches Feld mit dem Tracker.

%Vor%

So konfigurieren Sie das Modul:

%Vor%

Und am wichtigsten, rufen Sie injectStatics in Ihrem Diagramm auf.

%Vor%

Bearbeiten:

Wie Sie anmerkten, gibt Daggers Dokumentation an, dass statische Injektionen "sparsam verwendet werden sollten, da statische Abhängigkeiten schwer zu testen und wiederzuverwenden sind." Es ist alles wahr, aber weil Sie gefragt haben, wie man ein Objekt in ein Dienstprogramm injiziert Klasse das ist die beste Lösung.

Wenn Sie möchten, dass Ihr Code testbarer wird, erstellen Sie ein Modul wie folgt:

%Vor%

Jetzt können Sie static von TextViewHelper Methoden entfernen, da diese Dienstprogrammklasse mit Dolch injiziert wird.

%Vor%

So sollte es gemacht werden, wenn Sie guten Praktiken folgen wollen. Beide Lösungen funktionieren, also liegt es an Ihnen, eine auszuwählen.

    
tomrozb 10.07.2014 08:37
quelle