MEF应用向导

本文主要说明在Modern UI框架下使用MEF的必要步骤,关于MEF请自行脑补。

MEF-INTO-MUI实例代码下载: MefMuiApp.zip

1:创建一个导出属性

ModernFrame用来承载在MUI应用中显示的内容。内容是通过URI标识的,我们需要通过MEF来标记一段内容是被导出的,同时提供一个可供访问的URI标识,这可以通过元数据实现。

下面的ContentAttribute类继承自ExportAttribute,并添加了一个CotentUrl元数据属性,契约规定可导出的内容必须继承IContent接口。

为了能在MEF中使用强类型元数据,我们也定义了一个IContentMetadata接口,在后面将会用到

2:导出内容

下一步我们需要做的就是使用ContentAttribute来标记可被导出的内容页面,并且每一个页面都必须继承IContent接口。

下面的代码演示了将可被导出的MyPage指定URI为"/MyPage"。

3:继承contentLoader

我们现在需要定义一个IContentLoader的实现,能够接收导出的内容,并根据内容的URI返回接口。为此我们创建新的从DefaultContentLoader派生的MEFContentLoader,这个加载器可以导入包含了IContentMetadata和继承了IContent接口的导出内容,这样我们就可以通过URI访问了。

当通过LoadContent方法请求时,请求的uri会和元数据进行匹配,成功后内容就会被返回。Content实例通过Lazy进行延迟加载。

请注意MefContentLoader本身也有出口。

4:把他们放在一起

所有必须的元素已经准备就绪,我们现在要做的就是确保所有的Modern控件使用新的MefContentLoader而不是默认的contentLoader,在App.xaml中添加下面的默认样式。动态资源的引用问题将在后面解决。

MEF在应用启动时进行组合,将下面的代码添加到应用启动方法中(App.xaml.cs的OnStartup方法)

MEF组合需要创建的程序集目录并将其填充到CompositionContainer容器中,从容器中检索MefContentLoader实例并将其添加到全局应用程序资源字典中,一旦这个加载器被加载,在默认样式中使用动态资源的问题就被解决了。

就是如此。每当ModernFrame需要加载内容时,它就用在默认样式中定义的MefContentLoader,MefContentLoader根据ContentUri在导出的元数据中进行查找。

时间: 2024-11-05 18:32:28

MEF应用向导的相关文章

银联云闪付开发联调步骤向导

一.开发前的准备工作(开发中务必将控件mode改为测试环境)1. 打开https://open.unionpay.com/,后续说的文档下载.FAQ查询等都在这个平台操作.2. 下载规范和开发包.帮助中心-下载-产品接口规范-手机控件支付产品接口规范,帮助中心-下载-产品接口规范-手机控件支付产品技术开发包.(ApplePay后台部分和控件产品相同,区别仅在于调起的控件不同.)3. 开发人员都请先看下6.2的消费的交易流程.4. 相关测试参数:如果已签约,有自己的测试商户,则直接用自己的商户号测

猎豹MFC--第一个MFC程序设计(不用向导)

新建常规空项目: 手动添加 写头文件: CMyApp继承CWinApp有继承InitInstance函数,现在不用手写可以通过添加消息用向导来完成: 来自为知笔记(Wiz)

猎豹MFC--使用向导快速进行MFC程序设计--不需要全部搞懂,只把重要的几个搞懂即可

新建MFC项目  单文档 文档视图: 如上,向导会为我们自动生成4个类. 每个类中有很多代码,不需压迫我们全部搞懂,我们只把重要的几个搞懂即可. 以前是在窗口中画显示要在视图中画: 所有的显示都是在视图类中: 在视图类属性中添加  paint消息: 记住要在视图对象上添加消息而不是像以前那样在窗口对象上添加. 在视图类上再添加  鼠标单击消息: 来自为知笔记(Wiz)

C# 使用MEF动态加载不同的userControl,并实现不同userControl之间通信

1. 首先在项目的引用中添加:System.ComponentModel.Composition和bbv.Common.EventBroker 其中bbv.Common.EventBroker引用的dll库在http://sourceforge.net/projects/bbvcommon/中可以下载,如果获取不到,可以留言与我,我提供给大家.如图所示: 2.具体代码实现 1).主窗体代码: public partial class frmMain : Form { private void i

[MEF]第03篇 MEF延迟加载导出部件及元数据

一.演示概述 此演示介绍了MEF的延迟加载及元数据相关的内容. 在实际的设计开发中,存在着某些对象是不需要在系统运行或者附属对象初始化的时候进行实例化的, 只需要在使用到它的时候才会进行实例化,这种方式就可以理解为对象的迟延初始化,或者叫迟延加载. 对于提升系统的性能大有裨益呀! 另外,还可以为导出的部件添加元数据,以便在代码中提供更加灵活的扩展办法,或获取更多的相关信息.甚至,还可以自定义元数据的接口,无论是定义还是使用都非常的方便. 相关下载(屏幕录像):http://yunpan.cn/c

动画综合练习(延迟进入+页面向导+文本框抖动)

1.activity_welcome.xml(界面刚加载进入欢迎界面的布局) <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/ll_welcome_root" android:layout_width="fill_parent" android:layout_height="fill_parent&q

IEE数据库安装向导

RHEL 5用rpm包,直接安装后配置数据及缓存目录即可. RHEL 6用tar包+配置文件,本文是在RHEL 6上安装IEE的向导. ①上传infobright-4.0.6-x86_64.tar包和配置文件my-ib.cnf,mysqld-ib到服务器任意目录 ②解压tar包,移动到/usr/local/目录下,配置文件分别移动到/etc/目录,/etc/init.d/目录下 tar -xvf infobright-4.0.6-x86_64.tar mv infobright-4.0.6-x8

Yii2.0中文开发向导——高级应用程序模板

高级应用程序模板这个模板用在大型的团队开发项目中,而且后台从前台独立分离出来以便于部署在多个服务器中.由于YIi2.0的一些新的特性,这个程序模板的功能要更深一点.提供了基本的数据库的支持,注册.密码找回等功能.安装可以通过Composer来安装如果没有安装Composer,先安装 curl -s http://getcomposer.org/installer | php 然后用如下命令来获取 php composer.phar create-project --prefer-dist --s

asp.net中使用水晶报表 ---使用向导

编写环境 vs2013,sqlserver2012 由于我们安装的2013没有水晶报表,所以需要我们手动的去下载并安装 下载地址为http://www.aspsnippets.com/Articles/Download-Crystal-Reports-for-Visual-Studio-2013.aspx 然后我们就来编写我们的水晶报表,在编写前我们需要了解的是水晶报表有两种方式 1.pull 拉 拉的意思就是说,当你用的时候就连接数据库然后返回数据 2.push 推 推的意思就是保存在本地,要