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文件的属性:
生成操作是Resource是我自己摸出来的,bing到的一些资料上说的都是老版本的吧,都不对,包括那个Mike Taulty的视频的也不对。
就是这样。
Prism 5 + MEF中的ModuleCatalog.CreateFromXaml问题的更多相关文章
- 【转】MEF程序设计指南三:MEF中组合部件(Composable Parts)与契约(Contracts)的基本应用
按照MEF的约定,任何一个类或者是接口的实现都可以通过[System.ComponentModel.Composition.ExportAttribute] 特性将其定义为组合部件(Composabl ...
- 在MEF中实现延迟加载部件(转)
在MEF的宿主中,当我们通过Import声明导入的对象时,组装(Compose)的时候会创建该对象.例如: interface ILogger { void Log(string ...
- 在MEF中实现延迟加载部件
在MEF的宿主中,当我们通过Import声明导入的对象时,组装(Compose)的时候会创建该对象.例如: interface ILogger { void Log(string ...
- 在MEF中手动导入依赖的模块
对于简单的场景来讲,在MEF中导入依赖模块非常简单,只要用ImportAttribute标记依赖的成员,MEF模块会自动找到并创建该模块.但有的时候我们依赖的模块是上下文相关的,此时MEF框架的自动组 ...
- 【Prism】MEF版HelloWorld
引言 Pirsm框架是由微软P & P小组设计的,用于构建组合式的WPF企业级应用,支持两个IOC容器,分别为Unity和MEF.官方地址为http://compositewpf.codepl ...
- [Prism框架实用分享]如何在Prism应用程序中使用日志
前言 在Prism中有关日志的命名空间: Microsoft.Practices.Prism.Logging 在Prism中,你可以使用Prism自带的Logger(比如TextLogger等),也可 ...
- 【Prism】MEF版UIComposition
引言 UIComposition原版Demo在PrismV5的解压包里面.原Demo用了.net4.5版本的DLL,我改成.net4.0的. RegionContext 这个Demo比之前那几个示例大 ...
- 【Prism】MEF版EventAggregation
引言 第三弹是EventAggregation Demo的改造. EventAggregation EventAggregation事件聚集是Prism框架中的通信实现.它可以在松散的模块或者窗体之 ...
- 【Prism】MEF版Commanding
引言 接下来的是Commanding Demo的改造. DelegateCommand WPF本身提供了一个RoutedCommand,然而没什么卵用.在Prism框架中提供了个更人性化的ICo ...
随机推荐
- Linux多线程实例练习 - pthread_create()
Linux多线程实例练习 pthread_create():创建一个线程 int pthread_create(pthread_t *tidp, const pthread_attr_t *attr, ...
- [LintCode] Two Sum 两数之和
Given an array of integers, find two numbers such that they add up to a specific target number. The ...
- jQuery cdn使用介绍
如果您不希望下载并存放jQuery,那么也可以通过 CDN(内容分发网络)引用它,下面是具体实现,有类似需求的各位可以参考下哈,希望对你有所帮助 如果您不希望下载并存放 jQuery,那么也可以通 ...
- jQuery 插件autocomplete
jQuery 插件autocomplete 自动加载 参考: http://www.cnblogs.com/Peter-Zhang/archive/2011/10/22/2221147.html ht ...
- C++对析构函数的误解(转)
C++析构前言 析构函数在什么时候会自动被调用,在什么时候需要手动来调用,真不好意思说偶学过C++…今日特此拨乱反正. C++析构误解正文 对象在构造的时候系统会分配内存资源,对一些数据成员进行初始化 ...
- xshell的快捷键(非常实用)
删除 ctrl + d 删除光标所在位置上的字符相当于VIM里x或者dl ctrl + h 删除光标所在位置前的字符相当于VIM里hx或者dh ctrl + k 删除光标 ...
- 通过 --py-files 可以在pyspark中可以顺利导入
文件import问题 问题: 在脚本中import了其他文件, pyspark中可以运行, 但是在spark-submit中总是失败 假定我们的任务脚本为 app.py , 大体代码像这样: from ...
- 创建 PDO 实例并在构造函数中设置错误模式
PDO 将只简单地设置错误码,可使用 PDO::errorCode() 和 PDO::errorInfo() 方法来检查语句和数据库对象.如果错误是由于对语句对象的调用而产生的,那么可以调用那个对象的 ...
- python 语料处理(从文件夹中读取文件夹中文件,分词,去停用词,去单个字)
# -*- coding:utf8 -*- import os import jieba def splitSentence(inputFile): fin = open(inputFile, 'r' ...
- JavaScript原型链问题
1. 使用new来创建对象(调用构造函数)时,如果return的是非对象(数字.字符串.布尔类型等)会忽而略返回值;如果return的是对象,则返回该对象. 2. 重写原型会切断原型链: foo = ...