Laut Dokumentation :
Component Dependency
Sie 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
.
SubComponent
Ermö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 Module
s deklariert sind .
Lassen Sie uns sagen, Sie haben ein ApplicationComponent
alles enthält , was Android
damit zu tun ( LocationService
, Resources
, SharedPreference
, usw.). Sie möchten auch, DataComponent
wo Sie Dinge für die Persistenz verwalten und WebService
mit APIs umgehen. Das einzige, was Ihnen fehlt, DataComponent
ist Application Context
das, in dem Sie wohnen ApplicationComponent
. Der einfachste Weg , eine zu bekommen Context
aus DataComponent
würde eine Abhängigkeit von sein ApplicationComponent
. Sie müssen sicher sein, dass Sie eine Context
explizit deklarierte haben, ApplicationComponent
da Sie nur Zugriff auf deklarierte Inhalte haben. In diesem Fall gibt es keine manuelle Arbeit, dh Sie müssen nicht Submodules
im 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 WebService
von DataComponent
und LocationService
nach ApplicationComponent
in Ihren injizieren möchten, Fragment
der mithilfe der @Submodule
plus
obigen Funktion bindet . Das Coole dabei ist, dass die Komponente, an die Sie binden ( ApplicationComponent
), weder verfügbar gemacht werden muss WebService
noch LocationService
weil Sie sofort Zugriff auf das gesamte Diagramm haben.