2015-11-08 10 views
7

In Dagger2 in der Dokumentation, sagen Sie esWas ist "Dolch wird diese Felder injizieren, wenn angefordert, aber keine neuen Instanzen erstellen" bedeutet?

Wenn Ihre Klasse @ Inject-kommentierten Felder hat aber kein @ Konstruktor Inject-kommentierten, wird Dagger diese Felder spritzen, wenn gewünscht, aber nicht neue Instanzen erstellen. Fügen Sie einen Konstruktor ohne Argumente mit der Annotation @Inject hinzu, um anzugeben, dass Dagger Instanzen wie erstellen kann.

Wie es Felder injizieren, aber keine neuen Instanzen erstellen? Was ist der Unterschied?

Antwort

7

"wenn angefordert" bedeutet "wenn manuell injiziert", d. H. Das Objekt wird von Ihnen oder einem Framework erstellt

Auf der anderen Seite, wenn Sie @Inject annotiert Konstruktor Dagger wird in der Lage, Objekte dieser Klasse selbst instanziieren, so dass Ihre Klasse in der Mitte des Abhängigkeitsdiagramms und Objekt wird automatisch für Sie von Dagger erstellt werden .

Regel in Android injizieren Sie manuell nur Objekte, die erstellt werden/zerstört für Sie von Android (dh Sie haben keine Kontrolle über ihren gesamten Lebenszyklus) wie Anwendung, Aktivitäten, Dienstleistungen usw.

Auch Sie haben nicht Sorgen Sie sich, wenn Sie die Annotation @Inject auf dem Konstruktor einer Klasse versehentlich übersehen haben. Wenn Ihre Klasse die Mitte des Diagramms ist, wird Dagger feststellen, dass es Abhängigkeiten gibt, die nicht erfüllt sind und die Kompilierung mit dem entsprechenden Fehler fehlschlägt.

+0

Danke !! ..eine andere Frage ... Könnten Sie bitte einen Blick darauf werfen. Ich benutze Dolch in einer Klasse, die in der Mitte des Abhängigkeitsgraphen einige Abhängigkeiten benötigt, die bereits vom Modul bereitgestellt wurden. Zuerst benutze ich Feldinjektion, nur annotiert '@ Inject' auf Feld, und kein Konstruktor, dann fehlgeschlagen, gab mir einen Nullzeiger. Danach bewege ich das Feld in den Konstruktor mit dem Kommentar '@ Inject' auf dem Konstruktor, es hat gut funktioniert. Habe ich etwas verpasst? –

+1

Ich fürchte, diese Frage ist nicht sehr klar ... Können Sie es als separate Frage mit dem entsprechenden Code zur Verfügung stellen (und einen Kommentar hier mit Link zu diesem setzen)? – Ognyan

+0

Nachdem Sie Ihre Antwort und einen Blog gelesen haben, habe ich herausgefunden, was in meinem Code falsch ist. Ich habe keinen leeren Konstruktor in der Abhängigkeiten-Klasse hinzugefügt, vorher dachte ich, dass alle Abhängigkeiten in Modulen definiert werden müssen ... Bin ein wenig vertraut mit Dolch .. Danke nochmal! –