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在导出的元数据中进行查找。

  • 相关阅读:
    centos crash debug
    go get Unknown SSL protocol error in connection to gopkg.in
    Tensorflow serving with Kubernetes
    Spring 集成 Swagger UI
    Docker Registry V2 Garbage Collection
    Docker Registry V2 with Nginx
    Zabbix磁盘性能监控
    Zabbix CPU utilization监控参数
    Windows挂载Gluster复制卷
    Redis持久化存储(三)
  • 原文地址:https://www.cnblogs.com/boyliupan/p/4135041.html
Copyright © 2011-2022 走看看