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