MvvmLight ViewmodelLocator StaticResource 停止加载

MvvmLight ViewmodelLocator StaticResource stops loading

每当我使用 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());

最后一切都重新开始工作,通常到此为止。

但它每次都会发生。

我在定位器的构造函数中设置了一个断点,它肯定没有被命中...有人知道我可能做错了什么吗?

编辑:我终于找到了真正的异常:

A first chance exception of type 'Microsoft.Practices.ServiceLocation.ActivationException' occurred in GalaSoft.MvvmLight.Extras.DLL

这让我找到了我在下面发布的答案。谢谢!

原来问题出在我注册具有依赖关系的视图模型的顺序上。我有一个初始化 ViewModel 的基本 ViewModelLocator,以及一个包含平台特定代码的继承 ViewModelLocator...

在其中一个 ViewModel 的构造函数中,我引用了一种依赖类型,该类型将在设计时实例中注册。但由于这是运行时(它在到达派生平台 viewmodellocator 之前不会被注册)引用为空。

我将依赖代码从构造函数移到更合适的位置,这似乎可以解决问题![​​=10=]

长话短说:如果您遇到此问题,请确保您在正确的位置以正确的顺序正确初始化所有内容!