Dolch & verschachtelte Injektionen

8

Ich benutze Dagger , um Abhängigkeiten in ein zu injizieren Android-Anwendung, und ich stolperte über ein Problem, das ich nicht ganz sicher bin wie man sauber auflösen kann.

Was ich versuche zu erreichen, ist Helfer zu installieren und sie in meine Hände zu injizieren Aktivität, und diese Helfer enthalten auch injizierte Mitglieder.

Was funktioniert

?

Die Aktivität, in die mein Helfer injiziert wird:

%Vor%

Die Anwendung, die das Objektdiagramm erstellt:

%Vor%

Die Injektion funktioniert perfekt, wenn ich eine SampleHelper-Klasse direkt installiere, welches seinerseits einen injizierten Anwendungskontext erhält:

%Vor%

Mit dem folgenden Modul:

%Vor%

Was nicht funktioniert

Wenn ich jedoch die Hilfeschnittstelle von ihrer Implementierung abtrenne:

%Vor%

Und füge das dem Dolch-Modul hinzu:

%Vor%

Der Kontext wird in meinem SampleHelperImpl nicht injiziert, wie ich es erwartet hätte. Nun, ich denke, dies liegt daran, dass SampleHelperImpl eher durch direkten Konstruktoraufruf instanziiert wird dieser injektionsinitiierte Konstruktoraufruf, weil MyModule # provideApplicationContext () nicht einmal aufgerufen wird, so ist meine Vermutung, dass mir etwas über Dolch fehlt (was wahrscheinlich ist, da meine früheren DI-Erfahrungen nur Spring enthielten).

Irgendeine Idee darüber, wie mein Kontext in meiner injizierten Helper-Implementierung in einer "sauberen Dolch" -Weise injiziert werden kann?

Vielen Dank!

    
mrlem 15.07.2013, 11:17
quelle

4 Antworten

17

Das ist eine ziemlich alte Frage, aber ich denke, was Sie wollen, ist dies:

%Vor%

Auf diese Weise wird Dagger Ihr SampleHelperImpl erstellen und es daher injizieren.

    
alexanderblom 27.08.2013, 00:27
quelle
1

Falls jemand interessiert ist, können Sie beim Implementieren einer @ Provides-Methode in einem Dolch-Modul dolch-gehandhabte Objekte wie diese erhalten:

%Vor%

Das funktioniert, aber ich finde es immer noch etwas ungeschickt, da ich meine Helfer-Setter explizit nennen muss (normalerweise, was du mit der Injektion loswerden willst).

(Ich warte ein wenig, falls jemand mit einer besseren Lösung kommt)

    
mrlem 16.07.2013 08:14
quelle
1

(Gilt für Dolch v1.0.1)

Stellen Sie sicher, dass Sie die Adapterinjektion verwenden. Bei der reflektiven Injektion macht der Dolch anscheinend keine transitive Injektion auf @Provides -Objekte. Ich denke, das ist ein Fehler.

    
André W8 23.07.2013 16:14
quelle
0

Wenn Sie den richtigen Kontext einfügen möchten, sollten Sie sich dieses Beispiel ansehen Ссылка .

    
jfrey 16.07.2013 13:07
quelle