Согласно документации :
Component Dependency
дает вам доступ только к привязкам, предоставляемым в качестве методов предоставления через зависимости компонентов, т.е. у вас есть доступ только к тем типам, которые объявлены в parent Component
.
SubComponent
дает вам доступ ко всему графу связывания от его родителя, когда он объявлен, т.е. у вас есть доступ ко всем объектам, объявленным в его Module
s.
Скажем, у вас есть , ApplicationComponent
содержащее все Android
родственное вещество ( LocationService
, Resources
, SharedPreference
и т.д.). Вы также хотите, чтобы DataComponent
вы постоянно управляли вещами, а также имели WebService
дело с API. Единственное, чего тебе не хватаетDataComponent
это Application Context
что находится в ApplicationComponent
. Самый простой способ получить Context
от DataComponent
- это зависимость ApplicationComponent
. Вы должны быть уверены, что у вас есть Context
явное объявление, ApplicationComponent
потому что у вас есть доступ только к объявленным вещам. В этом случае нет ручной работы, то есть вам не нужно указывать Submodules
в parent Component
и явно добавлять свой подмодуль в родительский модуль, например:
MySubcomponent mySubcomponent = myComponent.plus(new ChildGraphModule("child!")); // No need!
Теперь рассмотрим тот случай, когда вы хотите ввести WebService
из DataComponent
и LocationService
из ApplicationComponent
в ваш, Fragment
который связывает с помощью@Submodule
plus
функции выше. Крутая вещь здесь заключается в том, что компонент, к которому вы привязываете ( ApplicationComponent
), не нужно раскрывать WebService
ни LocationService
потому, что у вас есть доступ ко всему графику сразу.