Во время разработки моего приложения UWP я заметил и заинтересовал странность, которую мне трудно объяснить.Объединенный ResourceDictionary initalization в приложении UWP
Я пользователь MvvmLight и я решил добавить экземпляр ViewModelLocator ресурсов в отдельном ResourceDictionary Core.xaml которые будут ссылаться из MergedDictionaries
в App.xaml. Ниже приводится содержание 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, это не называется до окна активации. Еще более интересно - если я вручную ссылаюсь на ключ ресурса Locator (например, поставить 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 –