0

我正在试验并试图了解 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它在正确的程序集中搜索?

4

1 回答 1

1

Catel 只能知道用于解析视图的类型的 [AS]。因此,如果您在 MyProject.Views 程序集中的类型中使用 [AS],它无法解析 MyProject.ViewModels 程序集中的视图模型。

在这种情况下,您必须简单地使用预期的程序集名称指定命名约定(例如 MyProject.Views.[VM]View

您也可以通过使用反射并解析包含 .Views 的所有命名空间来自己动态地执行此操作。在 Catel 的 TypeCache 中的程序集中。

于 2013-04-23T20:26:11.807 回答