2017-05-03 2 views
3

Ich arbeite an einem Projekt und versuche es so modular wie möglich zu machen.Dolch 2: Was macht @Module (includes =)?

Ich versuche, die @Module (includes = {}) Annotation zu verwenden, um meine Ziele zu erreichen, und es funktioniert nicht so gut.

Ich habe ein großes Modul für alle meine Java-Code und innerhalb jedes Abschnitts hat ein Modul (AboutModule für die Abhängigkeiten der Seite About, zum Beispiel). Dann wird für die gesamte „Core“ gradle Modul, habe ich einen Dolch 2-Modul „Coremodule“, die wie folgt aussieht:

@Module(includes = { 
     AddonModule.class, 
     VersionModule.class, 
     AboutModule.class} 
) 
public class CoreModule { 
} 

Bin ich recht in der Annahme, dass im Android gradle Modul, in dem alle App-Code geht , Ich sollte in der Lage sein, dieses Modul in eine Komponente einzubinden, und diese Komponente kann dann @ irgendetwas von all diesen Modulen, die in CoreModule aufgelistet sind, einlesen?

Im Moment habe ich immer bin Fehler aus diesen Komponenten zusammenstellen was darauf hindeutet, dass die Dateien sie injizieren, um für eine ganz andere Klasse „zu fragen“, die nicht in dem Modul ist.

Zum Beispiel habe ich eine GitHubComponent, die in eine GitHubActivity injiziert wird und auch versucht, mit der @Inject Annotation GithubService zu injizieren, aber der Compiler wirft Fehler aus, die diese Klasse versucht, eine andere Klasse zu injizieren ... Dies wird nirgendwo in der Zieldatei erwähnt. Ich habe dies versucht, um zu versuchen, den Fehler auszumerzen, aber ich sehe nicht, wo es falsch läuft.

Ich kann keine Dokumentation zu diesem Aspekt finden. Was macht der Include-Teil eigentlich? Benutze ich es richtig und deshalb ist der Fehler woanders?

Antwort

5

Lesen Sie die Dokumentation für Module.includes:

Weitere @Module -annotated Klassen, aus denen dieses Modul besteht. Die deduplizierten Beiträge der Module in und ihre rekursiven Einschlüsse werden alle zum Objektgraph beigesteuert.

Kurz gesagt, ja, ist Module.includes eine Möglichkeit, eine Abhängigkeit von den genannten Modulen der Zugabe (AddonModule, VersionModule und AboutModule in Ihrem Beispiel) von allem, was das umschließende Module (Coremodule in Ihrem Beispiel) enthält.

+1

Danke dafür. Ich schaute auf der Docs-Seite hoch und niedrig (wenn auch im Bus auf meinem Weg nach Hause ...), konnte es aber nicht finden. Ich benutze sie auf die richtige Weise, was großartig ist. Danke, dass du geholfen hast, das zu klären! Bezüglich meiner Fehler ti habe herausgefunden ich tatsächlich das ist, weil Coremodule alle Module innerhalb der Core-Bibliothek enthält und einige von ihnen haben Abhängigkeiten, die nicht in den Komponenten enthalten sind, war ich mit (GitHubComponent, in diesem Fall - Version und Addon Module haben eine andere Retrofit-Repository-Abhängigkeit, die nicht im GitHub-Modul bereitgestellt wird). Das löst auch das eine! – MattBoothDev