2

我开始使用 Prism 和 MVVM 处理 WPF 项目,我正在尝试使用 eventAggregator 但是,当执行下面的行时会引发异常:

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

但我无法理解我做错了什么,也许这是一件非常简单的事情,但我已经为此苦苦挣扎了几个小时。

希望有人可以帮助我,在此先感谢

4

1 回答 1

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为单例,因此您不必重复。

于 2012-08-01T18:46:00.660 回答