Dans la vue de poignard Hilt View 1.0.0-alpha01
'Assisted' is deprecated. Deprecated in Java 'ViewModelInject' is deprecated. Deprecated in Java 'ViewModelInject' is deprecated. Deprecated in Java 'Assisted' is deprecated. Deprecated in Java
Je peux utiliser le ci-dessous
implementation "androidx.hilt:hilt-lifecycle-viewmodel:1.0.0-alpha03" implementation 'com.google.dagger:hilt-android:2.31.2-alpha' kapt 'androidx.hilt:hilt-compiler:1.0.0-alpha03' kapt 'com.google.dagger:hilt-android-compiler:2.31.2-alpha'
cependant, lorsque je migrerai vers Dagger Hilt View Model 1.0.0-alpha03
class MyViewModel @ViewModelInject constructor( private val repository: Repository, @Assisted private val savedStateHandle: SavedStateHandle ) : ViewModel(), LifecycleObserver { // Some codes... }
J'ai obtenu les avertissements
implementation "androidx.hilt:hilt-lifecycle-viewmodel:1.0.0-alpha01" implementation 'com.google.dagger:hilt-android:2.28-alpha' kapt 'androidx.hilt:hilt-compiler:1.0.0-alpha01' kapt 'com.google.dagger:hilt-android-compiler:2.28-alpha'
quelle est la nouvelle façon de travailler sur il?
5 Réponses :
Dans alpha03, utilisez le nouveau @hiltViewModel
et le normal @inject
maintenant comme indiqué ci-dessous.
@HiltViewModel class MyViewModel @Inject constructor( private val repository: Repository, private val savedStateHandle: SavedStateHandle ) : ViewModel(), LifecycleObserver { // Some code }
Et si nous voulons passer la chaîne de fragment au constructeur de ViewModel et aussi injecter des référentiels
@Daniyaljavaid Je pense qu'il n'y a que deux façons. 1) Utilisez un SavedStateHandle comme conteneur d'arguments de fragments (comme dans la réponse). 2) Créez votre propre ASSEDFACTORY .
Pouvons-nous utiliser des paramètres privés? Parfois, je reçois des erreurs "ne peut pas être finales".
Dans la dernière mise à jour de Dagger Hilt, ils ont apporté peu de modifications, donc dans votre cas, vous pouvez utiliser @HiltViewModel
et @inject
pour l'utiliser avec ViewModel. xxx
De plus, si vous utilisiez applicationComponent
, dans la dernière mise à jour, il est changé en singletonComponent
.
Donc dans votre classe de module de cette façon.
@Module @InstallIn(SingletonComponent::class.java) object hiltmodel....{}
Veuillez revoir la documentation. Vos exemples sont faux. @HiltViewModeLinject n'est plus nécessaire, car il est obsolète.
Êtes-vous sûr ? Parce que nous n'avons utilisé que pour ajouter ViewModeLinject, mais dans la dernière version, nous utilisons HiltViewModel avec Inject pour le constructeur de classe ViewModel
@Andrew Jetez un coup d'œil ici, dagger.dev/hilt/view-model
Eh bien, vous devriez peut-être regarder votre propre lien. Comme vous pouvez le voir clairement, votre exemple est faux! '@Assisted' n'est plus nécessaire devant SavedStateHandle et il devrait être '@HiltViewModel' et non '@HiltViewModeLinject' comme vous avez écrit.
@Andrew Merci pour la clarification, était clairement mon mauvais, apprécié la correction
C'est une réponse formidable. J'ai récemment mis à niveau un ancien projet et cette réponse a sauvé ma journée.
Ainsi, dans le niveau de projet Gradle in Dependances, remplacez la version Hilt à 2.33-bêta
@HiltViewModel class TasksViewModel @Inject constructor(val taskDao: TaskDao) : ViewModel() {...}
et dans la classe de modèle de vue au lieu de @ViewModeLinject avant le constructeur supprimez cela et faites-le
buildscript{ ext.hiltVersion = "2.33-beta" dependencies{ classpath "com.google.dagger:hilt-android-gradle-plugin:$hiltVersion" } }
Obtenu en dessous de l'erreur après la mise à niveau Modèle "rel =" nofollow noreferrer "> ici et ajoutant également un module séparé avec API du fournisseur de vue de modèle, mais que rien de tout cela n'a fonctionné lors de la mise à niveau était de changer également la version de ClassPath.
Donc, pour faire ce travail, nous devons mettre à jour le chemin de classe à 2,31 et au-dessus qui est présent dans votre projet Gradle:
classpath "com.google.dagger:hilt-android-gradle-plugin:2.31-alpha"
sorties Avant janvier 2021, ne supportez pas la dernière annotation @HiltViewModel.
@ViewModeLinject a été obsolète et a été remplacé par @hiltViewModel .
Le ViewModel annagé avec HiltViewModel sera disponible pour la création par HiltViewModelfactory. Le HiltViewModel contenant un constructeur annoté avec inject aura ses dépendances définies dans les paramètres du constructeur injectés par la poignée de Dagger. https://dagger.dev/api/latest/dagger/hilt/android / lifecycle / hiltviewmodel
Un simple ViewModel ressemblera maintenant à:
@HiltViewModel class MainViewModel @Inject constructor(application: Application) : AndroidViewModel(application) { } or @HiltViewModel class MainViewModel @Inject constructor() : ViewModel() { } whatever your use case might be.