在我的UWP應用程序的開發過程中,我注意到並且雜亂無章,我很難解釋。在UWP應用程序中合併的ResourceDictionary initalization
我的用戶MvvmLight和我決定在一個單獨的ResourceDictionary Core.xaml將從MergedDictionaries
在App.xaml中引用添加ViewModelLocator資源實例。 以下是內容的App.xaml:中
<Application ...>
<Application.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="Resources/Core.xaml" />
<ResourceDictionary Source="Resources/Converters.xaml" />
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Application.Resources>
</Application>
內容Core.xaml:
<ResourceDictionary ...>
<viewModel:ViewModelLocator x:Key="Locator" />
</ResourceDictionary>
現在我在應該資源Core.xaml的InitializeComponent
期間被初始化方法調用App.xaml.cs,但是當我嘗試使用ServiceLocator
類(它是在ViewMode的構造函數中設置的lLocator在MvvmLight) - 這樣的 - ServiceLocator.Current.GetInstance<INavigationService>().Navigate<MainViewModel>();
- 我得到一個異常說:
An exception of type 'System.InvalidOperationException' occurred in
Microsoft.Practices.ServiceLocation.dll but was not handled in user code
Additional information: ServiceLocationProvider must be set.
事實上,如果我把一個斷點ViewModelLocator的構造,它沒有窗口被激活之前調用。更有趣的是,如果我手動引用定位器資源密鑰(例如將Debug.WriteLine(Resources["Locator"]);
放在ServiceLocator
的呼叫之上),則一切正常。如果我將ViewModelLocator
資源直接移動到App.xaml,那麼也是如此 - 然後在IntializeComponent
期間將其實例化。
在UWP應用程序中是否存在合併資源字典的懶惰實例化?或者爲什麼它會這樣呢?
我注意到這種奇怪的行爲發生在ResourceDictionary中有幾個正常(不是樣式)對象時。只有一個ViewModelLocator完全可以工作,並且正在調用ctor。我的發現http://stackoverflow.com/questions/34466035/uwp-resourcedictionary-is-not-being-loaded-when-i-add-a-second-object-to-it –