每当我使用MVVM Light时,我都会遇到最奇怪的事情。我创建一个ViewModelLocator并在app.xaml中注册为静态资源:
<viewmodel:WindowsViewModelLocator x:Key="ViewModelLocator" />
一切正常,这意味着在启动时静态资源已注册,我可以使用它,我可以通过转到
看到它App.Current.Resources["ViewModelLocator"]
然后突然,随机,永久地停止工作。我在每一个项目上都发生过这种情况,但我还没有确定原因,因为我无法确定我为使其停止工作而采取的一致行动,也无法找出任何方法将其恢复为任何形式。是我工作的时候......
继续前进的唯一方法是在启动时手动注册资源,如下所示:
if (!Resources.ContainsKey("ViewModelLocator") || Resources["ViewModelLocator"] == null) Resources.Add("ViewModelLocator", new WindowsViewModelLocator());
最后一切都开始工作了,通常就是结束了。
但它每隔一段时间就会发生。
我在定位器的构造函数中设置了一个断点,它肯定没有被击中......任何人都知道我可能做错了什么?
编辑:我终于找到了实际的例外:
类型的第一次机会异常 发生了'Microsoft.Practices.ServiceLocation.ActivationException' GalaSoft.MvvmLight.Extras.DLL
这让我找到了我在下面发布的答案。谢谢!
答案 0 :(得分:0)
事实证明问题是我注册具有依赖项的视图模型的顺序。我有一个初始化ViewModel的基本ViewModelLocator,以及一个包含特定于平台的代码的继承ViewModelLocator ......
在其中一个ViewModel的构造函数中,我引用了一个依赖类型,它们将在设计时实例中注册。但由于这是运行时(在它到达派生平台viewmodellocator之前没有注册),引用为null。
我将依赖代码从构造函数中移出到一个更合适的位置,似乎可以修复它!
长话短说:如果您遇到此问题,请确保按照正确的顺序和正确的位置正确初始化所有内容!