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的视频的也不对。

 

就是这样。

你可能感兴趣的:(create)