zoukankan      html  css  js  c++  java
  • ModernUI教程:MEF应用向导

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

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

    1:创建一个导出属性

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

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

    clipboard

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

    clipboard[1]

    2:导出内容

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

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

    clipboard[2]

    3:继承contentLoader

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

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

    clipboard[3]

    请注意MefContentLoader本身也有出口。

    4:把他们放在一起

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

    clipboard[4]

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

    clipboard[5]

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

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

  • 相关阅读:
    置顶
    hbck2的一些用法
    常用的jvm一些监控命令
    HBCK2修复hbase2的常见场景
    HBase2版本的修复工具HBCK2
    使用python写入excel
    CentOS-Linux下面的xfs磁盘配额
    使用podman容器部署飞儿云框架
    在docker中安装宝塔
    在CentOS7中安装Docker并开一台CentOS8的容器
  • 原文地址:https://www.cnblogs.com/boyliupan/p/4135041.html
Copyright © 2011-2022 走看看