【发布时间】:2019-01-22 21:02:44
【问题描述】:
我的目标是在应用程序的其余部分(可见 UI)之前加载我的一项数据服务。
在尝试预加载我的数据服务之前,我的 MVVMlight 设置库存充足。
- ViewModelLocator 在 App.Xaml 中初始化。
- ViewModel 和 DataService 已注册,并且可以正常工作。
在我的 App.xaml.cs 中,主视图是这样加载的。
var mainWindow = new View.MainWindow();
mainWindow.Show();
为了预加载我的数据服务,我将我的数据服务设置为 createInstanceImmediately,然后在 mainWindow 代码上方添加以下内容。
DataService dataService = SimpleIoc.Default.GetInstance<IDataService>();
该行生成异常“CommonServiceLocator.ActivationException: 'Type not found in cache: Namespace.IDataService.'”
如果将该行移到 mainWindow 代码下方,它就可以正常工作。
我的第一个想法是这是一个时间问题,但如果我添加延迟,我仍然会收到错误。所以看起来应用程序资源在加载视图之后才会加载。我没想到会这样,因为 app.xaml 和 app.xaml.cs 实际上属于同一类。无论如何,我不确定如何解决这个问题,或者我什至可以。
为什么 ViewModelLocator 在没有视图的情况下无法加载?有没有办法强制它手动加载应用程序资源?还是有更好的办法?
【问题讨论】:
-
创建窗口前需要移动服务注册。它应该是您的 App 类构造函数中的第一行之一
标签: c# wpf mvvm-light