您缺少定位器的初始化代码。
您要么使用 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
为单例,因此您不必重复。