ServiceLocationProvider doit être défini
Je suis en utilisant MVVM Light. Quand j'ai ajouter de la valeur convertisseurs dans mes ressources, mon application se bloque à l'exception:
Une exception de type 'System.InvalidOperationException' s'est produite dans Microsoft.Practices.ServiceLocation.DLL mais n'a pas été traitée dans le code utilisateur
Informations supplémentaires: ServiceLocationProvider doit être définie.
Dans le App.xaml.cs
OnLaunched événement, j'ai cette ligne
ServiceLocator.Current.GetInstance<MyViewModel>();
Il se bloque là..
Dans ce ServiceLocator je peux voir il y a un SetLocatorProvider méthode qui prend en argument ServiceLocatorProvider. Je ne pourrais pas trouver quelque chose dans le Web et Microsoft MSDN page est datée:
protected override async void OnLaunched(LaunchActivatedEventArgs e)
{
Frame rootFrame = Window.Current.Content as Frame;
if (rootFrame == null)
{
...
}
if (rootFrame.Content == null)
{
...
}
Window.Current.Activate();
DispatcherHelper.Initialize();
ServiceLocator.SetLocatorProvider(() => SimpleIoc.Default);
ServiceLocator.Current.GetInstance<MyViewModel>();
}
EDIT: Voici le le plein OnLaunched événement.
Après la mise
ServiceLocator.SetLocatorProvider(() => SimpleIoc.Default);
une exception est:
Une exception de type Microsoft.Les pratiques.ServiceLocation.ActivationException' s'est produite dans GalaSoft.MvvmLight.Extras.DLL mais n'a pas été traitée dans le code utilisateur
Des renseignements supplémentaires: Type introuvable dans le cache: cMC.ViewModel.MyViewModel.
C'est le code de ViewModelLocator
public class ViewModelLocator
{
public ViewModelLocator()
{
ServiceLocator.SetLocatorProvider(() => SimpleIoc.Default);
SimpleIoc.Default.Register<MyViewModel>();
}
public MyViewModel MyVM
{
get
{
return ServiceLocator.Current.GetInstance<MyViewModel>();
}
}
public static void Cleanup() {}
}
- Depuis le ServiceLocator est une sorte de Wrapper pour la mise à disposition du Cio Conteneurs comme l'unité ou de la mef ... Il vous demande de configurer le fournisseur en invoquant la méthode ServiceLocator.SetLocatorProvider(() => nouvelle UnityServiceLocatorAdapter(conteneur));
Vous devez vous connecter pour publier un commentaire.
J'ai un peu pensé à elle.
Il était également nécessaire d'enregistrer le ViewModel, quelque chose qui s'est passé dans le ViewModelLocator constructeur, mais pour une raison quelconque, le constructeur est exécuté au plus tard. J'ai donc modifié le ViewModelLocator classe comme ceci:
}
Puis dans l'Application.xaml.cs:
Vous n'êtes pas le réglage de la LocationProvider (bien que le message d'erreur est assez évident..):
Vous avez besoin pour donner le ServiceLocator votre Conteneur IoC de choix:
Voir cet exemple qui utilise l'Unité et un Adaptateur: