Ich möchte Dagger auf Android verwenden, um eine Instanz von Activity
wie folgt in eine andere Klasse zu injizieren:
Ich kann die Injektion durchführen, aber alle Felder von Activity
sind null
zum Zeitpunkt der Injektion .
Hier mache ich die Injektion:
My Activity
ist ein Modul für sich.
Dies ist mein Hauptmodul
%Vor% Und meine Application
-Klasse, die das Objektdiagramm bootstrappt.
Ich suche nach einer Möglichkeit, die Injektion explizit auszuführen, nachdem ich setContentView
aufgerufen habe.
Wie gehe ich dabei vor?
Ich habe es so gemacht - aber ich bin mir nicht sicher, ob das der "richtige Weg" ist. Was ich mache ist
Module
-Konstruktor ObjectGraph
nach erstellt habe. setContentView()
, damit eine richtige Activity
-Instanz an die ObjectGraph
weitergegeben wird. Mein Activity
ist kein Dolch mehr Module
.
Dies wird im folgenden Code umgesetzt:
%Vor% Und so sieht mein Activity
aus:
Diese Lösung scheint die von Jesse Wilson in auf diese Antwort angesprochenen Punkte anzusprechen. Allerdings mache ich mir Sorgen um die Leistung, da die ObjectGraph
jedes Mal, wenn Activity
erstellt wird, erstellt wird.
Irgendwelche Gedanken?
Leider wird dies wahrscheinlich nicht mit Dagger oder mit den meisten anderen Abhängigkeits-Injection-Frameworks funktionieren. Das Problem ist, dass der Lebenszyklus von Activity
nicht sauber mit dem Lebenszyklus von PresentationLayer
übereinstimmt. Wenn Sie beispielsweise Ihren Bildschirm drehen, zerstört Android die Aktivität und erstellt stattdessen eine andere. Es gibt keinen Haken für PresentationLayer
, um daran teilzunehmen.
Im Square verwenden wir Otto , um zwischen Aktivitäten und ihren Backends zu kommunizieren, und es hat gut funktioniert. Siehe Eric Burkes Beispielcode-Projekt für ein Beispiel.
Tags und Links java android dependency-injection dagger