Dagger2: Die Komponente kann nicht von mehreren Bereichen abhängig sein

8

Ja, ich weiß, dass dies schon einmal gefragt wurde, und ja, ich weiß, dass es "von Entwurf" ist.

Aber ich würde gerne so etwas tun:

%Vor%

Was ich jedoch bekomme, ist unscoped . Jedes Mal, wenn ich eine JobManager oder eine ScheduleRepository oder irgendetwas anderes injiziere, erhalte ich eine neue Instanz . Der einzige Weg, wie ich "reparieren" konnte, war das.

%Vor%

Kein Fan.

Also, wie soll man den Abhängigkeitsbaum strukturieren und auseinanderreißen, ohne eine große gigantische Blob-Komponente machen, die jedes einzelne Modul aufgelistet und hat Jede einzelne Bereitstellungsmethode (anstelle dieser "Teilkomponenten" -Komponentenabhängigkeiten)?

Ich habe versucht, Unterkomponenten dafür zu verwenden, aber dann müssen Sie jedes einzelne Modul für das letzte ApplicationComponent bereitstellen.

Ich bin mir nicht sicher, was ich hier machen soll. Ich habe probiert, @Singleton für jede Komponente der ersten Ebene und @SubcomponentScope für jede AppDataLevelComponent anzugeben. Ich habe auch versucht, einen neuen Bereich für jede einzelne Unterkomponente zu erstellen, aber beide scheiterten mit "kann nicht von mehreren Bereichskomponenten abhängen" / p>

BEARBEITEN: Offenbar ist es nicht genug, um die Komponenten mit dem Bereich zu markieren, um bereichsspezifische Provider zu erhalten. Sie müssen auch den Bereich für die mit @Provides annotierten Methoden angeben.

%Vor%

In der Zwischenzeit bin ich mit dieser Überkomponete gelandet.

%Vor%

Wo die xyzComponent -Klassen nur Schnittstellen sind, um die Bereitstellungsmethoden zu speichern ...

( Bitte beachten Sie, dass diese Struktur ein von Martin Fowler beschriebenes Anti-Pattern ist, und Sie sollten es tun Organisieren Sie Module basierend auf Features / Aktivitäten , und machen Sie sie mithilfe von Komponentenabhängigkeiten zu Subscoping-Komponenten.Komponentenabhängigkeiten werden verwendet, um Ihre Superscope-Komponenten zu subscopen und Abhängigkeits-Provider zu "erben".)

    
EpicPandaForce 10.07.2015, 13:58
quelle

1 Antwort

2

Ich hatte dieselben Probleme wie Sie nicht vor und endete mit dem gleichen Uberkomponenten-Ansatz, außer dass ich @Subcomponent s verwende, um die Dinge zu organisieren und nicht alle Module in der Uberkomponente aufgelistet zu haben (ich nenne es "top" oder " App "Komponente).

Hier sehen Sie ein Beispiel: Migration fehlend inject from modul mit complete = false von Dolch 1 nach Dolch 2

    
Ognyan 16.07.2015, 12:20
quelle