48
votes

Dagger hilt «assisté» et «ViewModeLinject» est obsolète. Dans la vue de poignard sur la vue 1.0.0-alpha03

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?


0 commentaires

5 Réponses :


96
votes

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
}


3 commentaires

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".



44
votes

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....{}


6 commentaires

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.



0
votes

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"
    }
}


0 commentaires

1
votes

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.


0 commentaires

8
votes

@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.


0 commentaires