Question

I started working on a WPF project using Prism and MVVM, and I am trying to use the eventAggregator but, when the line below is executed an exception is raised:

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

But I cant understand what I am doing wrong, maybe this is a very simple thing, but I have been struggling with this for a couple hours.

Hope someone can help me, thanks in advance

Was it helpful?

Solution

You lack the initialization code of your locator.

Either you use Prism (do you?) and you need to set up your bootstrapper correctly - http://msdn.microsoft.com/en-us/library/gg430868(PandP.40).aspx

Or you don't use Prism and you just set up the locator manually (in Main for example):

IUnityContainer container = new UnityContainer();

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

ServiceLocator.SetLocatorProvider( () => container );

then you can call in any place of your code

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

Edit: you have edited your question and you now mention Prism. You should then create a custom bootstrapper, register your types and run the bootstrapper.

public class CustomBootstrapper : UnityBootstrapper 
{
}

and call

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

in the starting routine of your application. From what I remember, UnityBootstrapper registers the IEventAggregator as singleton so you don't have to repeat that.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top