Ответ
@Component - это корневой компонент, который создает граф зависимостей. Он должен быть объявлен в корне приложения и может иметь зависимости от других компонентов через dependencies.
@Subcomponent - это дочерний компонент, который наследует граф зависимостей родительского компонента. Он объявляется внутри интерфейса родительского компонента и создается через фабричный метод родителя.
Ключевые различия:
- Subcomponent имеет доступ ко всем зависимостям родителя
- Subcomponent не требует явного указания зависимостей через
dependencies - Subcomponent объявляется внутри родительского компонента
Пример:
@Component
interface AppComponent {
fun loginComponent(): LoginComponent.Factory
}
@Subcomponent
interface LoginComponent {
@Subcomponent.Factory
interface Factory {
fun create(): LoginComponent
}
}