Catel (инфраструктура MVVM) [AS] не возвращает правильное имя сборки

Я экспериментирую и пытаюсь понять структуру Catel.

Я понимаю, что у Catel есть соглашение об именах для регистрации представлений и моделей представлений. Согласно документации соглашение [AS] должно быть заменено именем сборки. Для меня это не так, и я должен вручную написать имя сборки следующим образом:

string aSSname = Assembly.GetExecutingAssembly().GetName().Name;
var viewLocator = serviceLocator.ResolveType<IViewLocator>();
viewLocator.NamingConventions.Add(aSSname + ".Views.[VM]Window");

Следующая доза кода НЕ работает для меня:

viewLocator.NamingConventions.Add("[AS]"+ ".Views.[VM]Window");

Дополнительная информация (если это поможет):

Весь приведенный выше код находится в App.xaml.cs

Я загружаю viewModel как отдельную сборку:

 AppDomain.CurrentDomain.PreloadAssemblies(typeof (App).Assembly.GetDirectory());

Подводя итог, как я могу заставить этот пример работать с соглашением [AS].

Моя догадка:

Я предполагаю, что viewLocator ищет не ту сборку. вероятно, глядя в ту же сборку, были модели просмотра.

если это так, как я могу изменить viewLocator, чтобы он искал правильную сборку?


person RayOldProf    schedule 23.04.2013    source источник


Ответы (1)


Catel может знать только об [AS] того типа, который используется для разрешения представления. Поэтому, если вы используете [AS] в типе в сборке MyProject.Views, он не может разрешать модели представлений в сборке MyProject.ViewModels.

В этом случае вы должны просто указать соглашение об именах с ожидаемым именем сборки (например, MyProject.Views.[VM]View

Вы также можете сделать это динамически самостоятельно, используя отражение и разрешая все пространства имен, содержащие .Views. в сборках, находящихся в TypeCache компании Catel.

person Geert van Horrik    schedule 23.04.2013