#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