MEF可以在传统应用程序中使用(包括桌面的Winform、控制台程序和Web的ASP.NET),也可以在RIA的Silverlight中使用。在Silverlight中只是宿主的方式有所不同,实际上在Silverlight中也可以像传统应用程序中是方式去宿主,MEF也为Silverlight提供了独特的宿主方式,使用中需要引用System.ComponentModel.Composition.Initialization.dll动态链接库。
Silverlight中提供了一种新的宿主MEF的方式,只需要在Application_Startup事件处理函数中通过调用System.ComponentModel.CompositionInitialization程序集的 System.ComponentModel.Composition.CompositionInitializer类里面的方法一行代码就可以完成MEF的宿主,这是非常方便、简单的。详细如下代码块:
private void Application_Startup(object sender, StartupEventArgs e)
{
    CompositionInitializer.SatisfyImports(this);
}
下面用一个简单的示例程序演示下在Silverlight中的MEF的基本应用。比如编写一个日志组件,分别提供两种写日志的方式,既写文本日志和数据库日志,那么对于需要通过MEF托管的部件可以如下代码定义:
public interface ILogger
{
    void WriteLog(string message);
}
    
[Export("TXT",typeof(ILogger))]
public class TXTLogger : ILogger
{
    public void WriteLog(string message)
    {
        System.Console.WriteLine(message);
    }
}

[Export("DB",typeof(ILogger))]
public class DBLogger : ILogger
{
    public void WriteLog(string message)
    {
        System.Console.WriteLine(message);
    }
}

分别将两个不同的日志记录组件都通过[ExportAttribute]进行标注为导出部件,并分别为其设置好通信契约,那么在导入他们的地方就直接通过契约确定分别导入什么类型的日志记录实现部件。可以通过提供一个统一的门面服务以供系统中统一调用,大致如下代码所示:
/// <summary>
/// 门面服务,聚合不同的日志记录部件,通过MEF进行组合
/// </summary>
[Export]
public class FacadeService
{
    [Import("TXT")]
    public ILogger TXTLogger { get; set; }

[Import("DB")]
    public ILogger DBLogger { get; set; }
}

实际上门面服务作为一个简单、单纯的辅助类,也是可以通过MEF进行动态装配的,如上代码就将FacadeService也进行了[ExportAttribute]标注,表示此门面类也是一个可装配的部件,那么在App 中同样可以通过[ImportAttribute]进行导入的。
/// <summary>
/// 导入FacadeService
/// </summary>
[Import]
public FacadeService Service { get; set; }
接下来看看如何调用,FacadeService是被导入在App中的,在应用的时候可以通过Application.Current获取到当前Silverlight的App对象,总而达到可调用被导入在App中的部件。
public MainPage()
{
    InitializeComponent();
 
    var service = (Application.Current as App).Service;
    service.TXTLogger.WriteLog("写日志到文本文件");
    service.DBLogger.WriteLog("写日志到数据库");
}
注:本文参考于Hosting MEF in Silverlight using CompositionInitializer ,点击连接可访问英文原文。
MEF官方网站:http://mef.codeplex.com/
推荐资源:在应用程序中宿主MEF
 
 

转载于:https://blog.51cto.com/beniao/343615

Silverlight中使用CompositionInitializer宿主MEF相关推荐

  1. 在应用程序中宿主MEF

    在应用程序中宿主MEF其实非常简单,只需要创建一个组合容器对象(CompositionContainer)的实例,然后将需要组合的部件(Parts)和当前宿主程序添加到容器中即可.首先需要添加MEF框 ...

  2. Silverlight实用窍门系列:40.Silverlight中捕捉视频,截图保存到本地

    在Silverlight中我们可以捕捉视频设备以制作视频会议系统,或者通过视频设备截图功能上传头像等功能. 下面我们通过一个简单的实例来访问视频设备,并且截取图像下载该截图文件至本地. 一.在Silv ...

  3. Silverlight中的拖拽实现的图片上传---1

    在Silverlight中因为可以直接从系统的文件夹里面拖出来一个文件直接放到浏览器中,我在想使用这个功能来做成图片上传(或者文件上传),这样的用户体验将会是非常好的. 传统的上传都是打开对话框,选择 ...

  4. Silverlight中的ControlTemplate(2)

    Silverlight中的ControlTemplate介绍了ControlTemplate的相关的几个知识,这篇继续介绍剩余的内容 上文我们已经为Tooltip的ControlTemplate添加了 ...

  5. Silverlight实用窍门系列:47.Silverlight中元素到元素的绑定,以及ObservableCollection和List的使用区别...

    问题一:在某一些情况下,我们使用MVVM模式的时候,对于某一个字段(AgeField)需要在前台的很多个控件(A.B.C.D.E)进行绑定,但是如何能够让我们后台字段名改变的时候能够非常方便的改变所有 ...

  6. 在Silverlight中绘制贝塞尔曲线

    在Silverlight中绘制贝塞尔曲线 我以前的流程设计器使用的都是曲线,而且不能调扭曲,朋友们意见很大,后来我升级了设计器,这里贴出我实现扭曲的思路 代码下载: http://files.cnbl ...

  7. 一步一步学Silverlight 2系列(21):如何在Silverlight中调用JavaScript

    概述 Silverlight 2 Beta 1版本发布了,无论从Runtime还是Tools都给我们带来了很多的惊喜,如支持框架语言Visual Basic, Visual C#, IronRuby, ...

  8. 数据库LINQ TO SQL在Silverlight中的应用(WCF)------学习笔记(一)

    数据库LINQ TO SQL在Silverlight中的应用(WCF)------学习笔记(一) 步骤: 1. 创建SILVERLIGHT应用程序 2. 创建LINQ TO SQL [注意序列化的问题 ...

  9. silverlight 打开html_在Silverlight中嵌入HTML或aspx页面-阿里云开发者社区

    有好几次遇到有的同志们问,怎么在Silverlight中嵌入其他页面如:html,aspx或jsp页面,这里写一个简单的使用方法,供大家参考: 下载第三方控件的dll,这里提供一个下载地址: 下面是这 ...

最新文章

  1. JavaScript对象克隆
  2. Android开发之发送邮件功能的实现(源代码分享)
  3. 当Java 8 Streams API不够用时
  4. 关于神经网络权重初始值的设置的研究
  5. Hadoop简单介绍
  6. BZOJ3637 Query on a tree VI
  7. 胚系短变异 | 变异位点及基因型准确性的过滤
  8. 毕业生自传---(蝶变亚信)
  9. 计算机管理 灰色,详解电脑任务管理器变成灰色不可用的解决方法
  10. c/c++ 洛谷 P1003 【NOIP2011 提高组】 铺地毯
  11. 叉车AGV车载系统模块详解
  12. python数据可视化库 动态的_Python数据可视化:Pandas库,要是一行代码就能完成...
  13. Excel数据透视表经典教程四《多字段布局》
  14. RxJS——创建数据流
  15. NFT图片批量合成及稀有度计算工具
  16. JCJC错别字检测系统API接口使用文档-错别字检测接口说明
  17. 经济学和计算机类大学排名,2021中国经济学类专业大学排名
  18. 安装FreeBSD release13.0教程
  19. 人工智能导论-周苏作业答案
  20. 斯蒂文斯理工学院计算机专业排名,美国斯蒂文斯理工学院综合排名情况

热门文章

  1. String.Format格式说明
  2. 以实例说明如何使用C#从数据库中提取数据,按要求自动生成定制的Excel表格
  3. 网上几种常见校验码图片分析
  4. String和常量池
  5. linux平台的链接与加载
  6. 【linux】Valgrind工具集详解(三):打印信息说明
  7. 手机贷服务器维护升级,手机贷服务器升级
  8. html5 audio标志改变音量,HTML5之Audio(二)—— processor调节音量
  9. 均方根误差不超过_描述数值预报随机误差的利器:随机物理扰动组合方案
  10. linux更改文件夹权限_Linux 一些重点知识,整理的很全面,有必要收藏