Laut Dokumentation :
Component DependencySie haben nur Zugriff auf die Bindungen, die als Bereitstellungsmethoden über Komponentenabhängigkeiten verfügbar gemacht werden, dh Sie haben nur Zugriff auf Typen, die im übergeordneten Element deklariert sind Component.
SubComponentErmöglicht Ihnen den Zugriff auf das gesamte Bindungsdiagramm von seinem übergeordneten Diagramm aus, wenn es deklariert ist, dh Sie haben Zugriff auf alle Objekte, die in seinem Modules deklariert sind .
Lassen Sie uns sagen, Sie haben ein ApplicationComponentalles enthält , was Androiddamit zu tun ( LocationService, Resources, SharedPreference, usw.). Sie möchten auch, DataComponentwo Sie Dinge für die Persistenz verwalten und WebServicemit APIs umgehen. Das einzige, was Ihnen fehlt, DataComponentist Application Contextdas, in dem Sie wohnen ApplicationComponent. Der einfachste Weg , eine zu bekommen Contextaus DataComponentwürde eine Abhängigkeit von sein ApplicationComponent. Sie müssen sicher sein, dass Sie eine Contextexplizit deklarierte haben, ApplicationComponentda Sie nur Zugriff auf deklarierte Inhalte haben. In diesem Fall gibt es keine manuelle Arbeit, dh Sie müssen nicht Submodulesim Componentübergeordneten Modul angeben und Ihr Submodul explizit einem übergeordneten Modul hinzufügen, z.
MySubcomponent mySubcomponent = myComponent.plus(new ChildGraphModule("child!")); // No need!
Betrachten Sie nun den Fall, in dem Sie WebServicevon DataComponentund LocationServicenach ApplicationComponentin Ihren injizieren möchten, Fragmentder mithilfe der @Submodule plusobigen Funktion bindet . Das Coole dabei ist, dass die Komponente, an die Sie binden ( ApplicationComponent), weder verfügbar gemacht werden muss WebServicenoch LocationServiceweil Sie sofort Zugriff auf das gesamte Diagramm haben.