Как использовать Assisted Inject и Inject с рукояткой кинжала? ⇐ Android
Как использовать Assisted Inject и Inject с рукояткой кинжала?
У меня есть ViewModel, куда мне нужно во время выполнения добавить некоторые параметры, но также и в этой ViewModel мне нужен репозиторий. Не уверен, что с помощью рукояти кинжала можно совместить Assisted Inject и Inject. Если я попытаюсь использовать CommunityFeedRepository, это выдаст ошибку:
com.test.context.community.repository.CommunityFeedRepository — это введено в com.test.context.community.CommunityFeedViewModel(…, сообществоFeedRepository) com.test.context.community.CommunityFeedViewModel.Factory запрашивается в com.test.context.di.ViewModelFactoryProvider.communityFeedViewModelFactory()
Вот мой код:
класс CommunityFeedViewModel @AssistedInject конструктор( @Assisted("preloadedTiles") Private val preloadedTiles: List, @Assisted("path") частный путь val: String, @Assisted("token") частный токен val: String?, // частная переменная CommunityFeedRepository: CommunityFeedRepository ) : ViewModel() { var tiles: List = preloadedTiles частный val vmPath = путь вар vmToken: строка? = токен частный val tileState = MutableStateFlow (плитки) val til = tileState.asStateFlow() частная приостановка веселья loadTiles() { /*communityFeedRepository.getCommunityFeedTiles(vmPath, vmToken).onSuccess { tileState.value = it.tiles vmToken = it.token }*/ } в этом { viewModelScope.launch { если (tiles.isEmpty()) { нагрузкаТилс() } } } @AssistedFactory интерфейс Фабрика { весело творить( @Assisted("preloadedTiles") preloadedTiles: List, @Assisted("путь") путь: строка, Токен @Assisted("токен"): строка? ): CommunityFeedViewModel } @Suppress("UNCHECKED_CAST") сопутствующий объект { весело обеспечитьфабрику( AssedFactory: Фабрика, preloadedTiles: List, путь: Строка, токен: Строка? ): ViewModelProvider.Factory = объект: ViewModelProvider.Factory { переопределить fun create(modelClass: Class): T { верните AssistedFactory.create(preloadedTiles, путь, токен) как T } } } } @Композитный веселое сообществоFeedViewModel( preloadedTiles: List, путь: Строка, токен: Строка? ): CommunityFeedViewModel { val фабрика = EntryPointAccessors.fromActivity( LocalContext.current как активность, ViewModelFactoryProvider::class.java ).communityFeedViewModelFactory() вернуть модель представления( фабрика = CommunityFeedViewModel.provideFactory( фабрика, preloadedTiles = preloadedTiles, путь = путь, токен = токен ), ключ = путь ) }
У меня есть ViewModel, куда мне нужно во время выполнения добавить некоторые параметры, но также и в этой ViewModel мне нужен репозиторий. Не уверен, что с помощью рукояти кинжала можно совместить Assisted Inject и Inject. Если я попытаюсь использовать CommunityFeedRepository, это выдаст ошибку:
com.test.context.community.repository.CommunityFeedRepository — это введено в com.test.context.community.CommunityFeedViewModel(…, сообществоFeedRepository) com.test.context.community.CommunityFeedViewModel.Factory запрашивается в com.test.context.di.ViewModelFactoryProvider.communityFeedViewModelFactory()
Вот мой код:
класс CommunityFeedViewModel @AssistedInject конструктор( @Assisted("preloadedTiles") Private val preloadedTiles: List, @Assisted("path") частный путь val: String, @Assisted("token") частный токен val: String?, // частная переменная CommunityFeedRepository: CommunityFeedRepository ) : ViewModel() { var tiles: List = preloadedTiles частный val vmPath = путь вар vmToken: строка? = токен частный val tileState = MutableStateFlow (плитки) val til = tileState.asStateFlow() частная приостановка веселья loadTiles() { /*communityFeedRepository.getCommunityFeedTiles(vmPath, vmToken).onSuccess { tileState.value = it.tiles vmToken = it.token }*/ } в этом { viewModelScope.launch { если (tiles.isEmpty()) { нагрузкаТилс() } } } @AssistedFactory интерфейс Фабрика { весело творить( @Assisted("preloadedTiles") preloadedTiles: List, @Assisted("путь") путь: строка, Токен @Assisted("токен"): строка? ): CommunityFeedViewModel } @Suppress("UNCHECKED_CAST") сопутствующий объект { весело обеспечитьфабрику( AssedFactory: Фабрика, preloadedTiles: List, путь: Строка, токен: Строка? ): ViewModelProvider.Factory = объект: ViewModelProvider.Factory { переопределить fun create(modelClass: Class): T { верните AssistedFactory.create(preloadedTiles, путь, токен) как T } } } } @Композитный веселое сообществоFeedViewModel( preloadedTiles: List, путь: Строка, токен: Строка? ): CommunityFeedViewModel { val фабрика = EntryPointAccessors.fromActivity( LocalContext.current как активность, ViewModelFactoryProvider::class.java ).communityFeedViewModelFactory() вернуть модель представления( фабрика = CommunityFeedViewModel.provideFactory( фабрика, preloadedTiles = preloadedTiles, путь = путь, токен = токен ), ключ = путь ) }
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение