Внедрение зависимостей FragmentComponent в viewmodel с помощью @ViewModelInject

#android #viewmodel #dagger-hilt

#Android #viewmodel #рукоять кинжала

Вопрос:

Я хочу использовать свой ViewModel внутренний фрагмент с FragmentComponent зависимостями, но я думаю @ViewModelInject , что предоставлю ViewModel внутри ActivityComponent или ApplicationCoinmponent и не могу внедрить мои FragmentComponent зависимости в ViewModel

 class XViewModel @ViewModelInject constructor(
    private val xClass: XClass // this dependency provides in FragmentComponent
) : ViewModel() {

}
  

Когда я пытаюсь создать проект. сбой сборки KaptException и компилятор hilt говорят, что я не могу предоставить XClass . которые XClass предоставляют FragmentComonent .
когда я перемещаю метод XClass поставщика в ActivityComponent или ApplicationComponent build, больше не происходит сбой KaptException .

Редактировать: я прочитал сгенерированный код с помощью Hilt, и мое предположение было правильным, вставил и @ViewModelInject установил XViewModel модуль ActivityRetainedComponent . Я понятия не имею, почему?

 @Module
@InstallIn(ActivityRetainedComponent.class)
@OriginatingElement(
    topLevelClass = XViewModel.class
)
public interface XViewModel_HiltModule
  

Комментарии:

1. пожалуйста, добавьте журнал ошибок в вопрос

2. Добавьте класс, для которого у вас есть поставщик XClass . И заголовок и описание вашего вопроса не содержат такой же проблемы. Пожалуйста, проясните

3. ошибка @AliSh hilt: не удается предоставить XClass метод без @Inject или поставщика. но XClass при условии FragmentComponent , что и когда я перемещаю XClass поставщика, ActivityComponent или ApplicationComponent все работает нормально.

Ответ №1:

Я нашел ответ здесь. команда hilt делает это, потому что внедрение элементов из компонента fragment может привести к утечке экземпляров фрагментов при изменении конфигурации. ActivityRetainedComponent зависит от изменений конфигурации, поэтому он создается при первом onCreate и последнем onDestroy