Presenter-Injektion mit Dolch 2

8

Ich habe gerade angefangen, Dolch 2 zu benutzen, und ich habe Tausende von Online-Guides gefunden, jede mit einer anderen Implementierung und ich bin jetzt ein wenig verwirrt. Also im Grunde ist das, was ich im Moment geschrieben habe:

AppModule.java:

%Vor%

DataModule.java:

%Vor%

PrefsModel.java:

%Vor%

AppComponent.java (Ich stelle das QueryPreferences-Objekt zur Verfügung, da ich es in einem Presenter brauche, hoffentlich auf diese Weise korrekt):

%Vor%

Dann habe ich die FwApplication.java:

%Vor%

Schließlich habe ich ein weiteres Modul für die Moderatoren hinzugefügt:

%Vor%

Und die folgende Komponente (die einen Fehler zurückgibt, weil ich hier keine abhängigen Abhängigkeiten hinzufügen kann):

%Vor%

Also, ich habe einige Fragen, die mir nicht klar sind, wenn ich die Dokumentation online lese:

  • Wie kann ich den Fehler in der Presenter-Komponente beheben, da dieser von NetworkService abhängig ist, der ein in der AppComponent definierter Singleton ist?
  • Ich habe ein HomeFragment, das den HomePresenter mit "new HomePresenter (networkService)" implementieren soll, aber jetzt weiß ich nicht, wie ich den definierten DI
  • verwenden soll

BEARBEITEN - FIX:

HomeFragment.java:

%Vor%

Dann habe ich den Presenter-Konstruktor auf diese Weise modifiziert:

%Vor%

Dann wird NetworkService automatisch injiziert.

Ich habe mich gefragt, ob es auf diese Weise korrekt ist, da ich für jedes Fragment, das ich brauche, einen Moderator aufrufen muss, der genauso aufgebaut ist wie der über dem folgenden Code:

%Vor%     
user1341300 25.04.2016, 11:10
quelle

2 Antworten

11

Sie mischen etwas zusammen. Um Ihren Moderator bereitzustellen, sollten Sie zu etwas wie dem folgenden wechseln:

Verwenden Sie nach Möglichkeit die Konstruktorinjektion. Es wird die Dinge viel einfacher machen

%Vor%

Um die Schnittstelle bereitzustellen, verwenden Sie diesen Konstruktor injection und depend von der Implementierung

%Vor%

Auf diese Weise müssen Sie keine Konstruktoren selbst aufrufen. Und injiziere den Moderator ...

%Vor%

Auf diese Weise werden Sie die Dinge injizieren. Bitte lesen Sie dies sorgfältig und versuchen Sie es zu verstehen. Dies wird Ihre Hauptprobleme beheben, Sie können immer noch nicht 2 Präsentatoren desselben Typs aus demselben Modul (im selben Umfang) bereitstellen.

%Vor%

Dies funktioniert nicht . Sie können nicht 2 Objekte der gleichen Art bereitstellen. Sie sind nicht zu unterscheiden. Schau dir @Qualifiers an wie @Named , wenn du dir sicher bist, dass du so bist will gehen.

    
David Medenjak 25.04.2016, 23:17
quelle
4

Sie müssen Presenter nicht bereitstellen, wenn @Inject-Annotation im Konstruktor verwendet wird. @Inject-Annotation, die im Konstruktor der Klasse verwendet wird, macht diese Klasse zu einem Teil des Abhängigkeitsgraphen. So kann es auch bei Bedarf injiziert werden.

Wenn Sie andererseits @Inject-Annotation zu Feldern, aber nicht zu Konstruktoren hinzufügen, müssen Sie diese Klasse angeben.

    
Mladen Rakonjac 11.08.2016 12:16
quelle