{
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
总结
以上是内存溢出为你收集整理的Silverlight中使用CompositionInitializer宿主MEF全部内容,希望文章能够帮你解决Silverlight中使用CompositionInitializer宿主MEF所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)