首页 / 软件开发 / Silverlight / Silverlight中使用CompositionInitializer宿主MEF
Silverlight中使用CompositionInitializer宿主MEF2011-04-20 博客园 BeniaoMEF可以在传统应用程序中使用(包括桌面的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; }
}