作为共享目标启动时,ServiceLocationProvider为null

时间:2014-10-03 20:22:18

标签: windows-runtime winrt-xaml windows-phone-8.1 mvvm-light

我使用的是MVVM Light,除了将Windows Phone 8.1 WinRT应用程序作为共享目标启动外,一切都很好。

当我尝试分配MainViewModel viewModel = ServiceLocator.Current.GetInstance<MainViewModel>();时,我得到ServiceLocator.Current的异常。

异常消息:必须设置ServiceLocationProvider。

我是否需要在App.xaml.cs OnShareTargetActivated事件中做一些额外的事情以确保定位器正在运行?

更新: ShareTarget页面需要被视为您应用的一个小扩展。似乎并未加载所有应用程序的资源(包括App.xaml中的应用程序范围的资源)。所以我刚刚在共享页面的构造函数中创建了一个新的MainViewModel实例,只加载了共享完成所需的东西,保存信息并调用ShareOperation.ReportCompleted。这会将用户返回到正在共享的应用程序。

我仍然没有找到一个很好的解决方案,可以在我的ViewModel中获取其他资源,但现在可以使用。

1 个答案:

答案 0 :(得分:3)

这表示尚未执行以下行:

ServiceLocator.SetLocatorProvider(() => SimpleIoc.Default);

此行将指示ServiceLocator类将SimpleIoc.Default实例用作其ServiceLocator.Current。当您将应用程序作为共享目标运行时,初始化略有不同,可能ViewModelLocator未初始化。在使用ServiceLocator之前,您需要找到一个好的位置来执行初始化。

干杯 劳伦