2 votes

Problème d'EventAggregator et de ServiceLocator

J'ai commencé à travailler sur un projet WPF utilisant Prism et MVVM, et j'essaie d'utiliser l'eventAggregator mais, lorsque la ligne ci-dessous est exécutée, une exception est levée :

IServiceLocator ob = ServiceLocator.Current; // This line causes a Null pointer exception
EventAggregator = ob.GetInstance<IEventAggregator>();

Mais je ne comprends pas ce que je fais de mal, c'est peut-être une chose très simple, mais je me débats avec ça depuis quelques heures.

J'espère que quelqu'un pourra m'aider, merci d'avance

4voto

Wiktor Zychla Points 23918

Il vous manque le code d'initialisation de votre localisateur.

Soit vous utilisez Prism (c'est le cas ?) et vous devez configurer votre bootstrapper correctement - http://msdn.microsoft.com/en-us/library/gg430868(PandP.40).aspx

Ou bien vous n'utilisez pas Prism et vous configurez simplement le localisateur manuellement (en Main par exemple) :

IUnityContainer container = new UnityContainer();

// register the singleton of your event aggregator
container.RegisterType<IEventAggregator, EventAggregator>( new ContainerControlledLifetimeManager() ); 

ServiceLocator.SetLocatorProvider( () => container );

alors vous pouvez appeler dans n'importe quel endroit de votre code

var eventAggregator = ServiceLocator.Current.GetInstance<IEventAggregator>();

Edit : vous avez modifié votre question et vous mentionnez maintenant Prism. Vous devez alors créer un bootstrapper personnalisé, enregistrer vos types et exécuter le bootstrapper.

public class CustomBootstrapper : UnityBootstrapper 
{
}

et appeler

var bootstrapper = new CustomBootstrapper();
bootstrapper.Run();

dans la routine de démarrage de votre application. D'après ce dont je me souviens, UnityBootstrapper enregistre le IEventAggregator comme singleton pour ne pas avoir à le répéter.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X