我开始使用Prism和MVVM开发WPF项目,我正在尝试使用eventAggregator但是,当执行下面的行时会引发异常:
IServiceLocator ob = ServiceLocator.Current; // This line causes a Null pointer exception
EventAggregator = ob.GetInstance<IEventAggregator>();
但是我无法理解我做错了什么,也许这是一件非常简单的事情,但我一直在努力解决这个问题几个小时。
希望有人可以帮助我,提前谢谢
答案 0 :(得分:4)
您缺少定位器的初始化代码。
要么你使用Prism(是吗?)而你需要正确设置你的引导程序 - http://msdn.microsoft.com/en-us/library/gg430868(PandP.40).aspx
或者您不使用Prism,只需手动设置定位器(例如Main
):
IUnityContainer container = new UnityContainer();
// register the singleton of your event aggregator
container.RegisterType<IEventAggregator, EventAggregator>( new ContainerControlledLifetimeManager() );
ServiceLocator.SetLocatorProvider( () => container );
然后你可以在代码的任何地方打电话
var eventAggregator = ServiceLocator.Current.GetInstance<IEventAggregator>();
编辑:您已编辑过您的问题,现在提到Prism。然后,您应该创建一个自定义引导程序,注册您的类型并运行引导程序。
public class CustomBootstrapper : UnityBootstrapper
{
}
并致电
var bootstrapper = new CustomBootstrapper();
bootstrapper.Run();
在您的应用程序的启动例程中。根据我的记忆,UnityBootstrapper
将IEventAggregator
注册为单身,因此您无需重复此操作。