Prism 5 + MEF中的ModuleCatalog.CreateFromXaml问题

        protected override IModuleCatalog CreateModuleCatalog()
{
return Microsoft.Practices.Prism.Modularity.ModuleCatalog.CreateFromXaml(new Uri("ModuleCatalog.xaml", UriKind.Relative));
}

.net的背景,就不说了。用这个代码作为开头吧。在Bootstrapper载入部件时需要用到。

ModuleCatalog有很多种方法可以导入,总得来说就是灵活的。但偏偏这种看上去比较酷一点的(没有MyApp.exe.config文件,也不写死在cs代码里),却怎么也调试不出来。报的错误有这几种:

There is currently no moduleTypeLoader in the ModuleManager that can retrieve the specified module

{"“\f”(十六进制值 0x0C)是无效的字符  

The IModuleCatalog is required and cannot be null in order to initialize the modules.  

问题主要出在:

1. Xaml文件中定义的ModuleName与ExportModule的名称不符

2. Xaml文件的编译方式选择不正确

3. 忘了

我项目中通过的几个相关代码和设置如下,环境vs2013,Prism 5 + MEF,wpf。

MuduleCatalog.xaml:

<Modularity:ModuleCatalog xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:Modularity="clr-namespace:Microsoft.Practices.Prism.Modularity;assembly=Microsoft.Practices.Prism.Composition">
<Modularity:ModuleInfo Ref="file://XianFeng.Client.Modules.Notify.dll"
ModuleName="NotifyModule"
InitializationMode="WhenAvailable"
ModuleType="XianFeng.Client.Modules.Notify.NotifyModule, XianFeng.Client.Modules.Notify" />
</Modularity:ModuleCatalog>

相应的,xxxNotify.dll中的输出文件NotifyModule.cs:

namespace XianFeng.Client.Modules.Notify
{
[ModuleExport("NotifyModule", typeof(NotifyModule))]
public class NotifyModule : IModule
{
[Import]
public IRegionManager regionManager; public void Initialize()
{
this.regionManager.RegisterViewWithRegion(RegionNames.NotifyRegion, typeof(Views.Notify));
}
}
}

ModuleCatalog.xaml文件的属性:

Prism 5 + MEF中的ModuleCatalog.CreateFromXaml问题

生成操作是Resource是我自己摸出来的,bing到的一些资料上说的都是老版本的吧,都不对,包括那个Mike Taulty的视频的也不对。

就是这样。

上一篇:js获取页面url的方法


下一篇:[MetaHook] Find a function signature