MEF程序设计指南二:Silverlight中使用CompositionInitializer宿主MEF

本文介绍如何在Silverlight环境中使用MEF进行依赖注入及组件管理。通过CompositionInitializer简化MEF宿主配置,并通过示例展示如何创建和使用不同类型的日志记录组件。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

MEF程序设计指南二:Silverlight中使用CompositionInitializer宿主MEF

MEF可以在传统应用程序中使用(包括桌面的Winform、控制台程序和WebASP.NET),也可以在RIASilverlight中使用。在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 { getset
; }

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

 

  实际上门面服务作为一个简单、单纯的辅助类,也是可以通过MEF进行动态装配的,如上代码就将FacadeService也进行了[ExportAttribute]标注,表示此门面类也是一个可装配的部件,那么在App 中同样可以通过[ImportAttribute]进行导入的。

/// <summary>
/// 导入FacadeService
/// 
</summary>
[Import]
public FacadeService Service { getset; }

 

  接下来看看如何调用,FacadeService是被导入在App中的,在应用的时候可以通过Application.Current获取到当前SilverlightApp对象,总而达到可调用被导入在App中的部件。

public MainPage()
{
    InitializeComponent();
 
    var service = (Application.Current 
as
 App).Service;
    service.TXTLogger.WriteLog(
"写日志到文本文件"
);
    service.DBLogger.WriteLog(
"写日志到数据库"
);
}

 

 注:本文参考于Hosting MEF in Silverlight usingCompositionInitializer,点击连接可访问英文原文。

 MEF官方网站:http://mef.codeplex.com/

推荐资源:在应用程序中宿主MEF

 

 


相关说明
 

 本文属学习笔记文章,愿与有志者共同学习交流。欢迎转载,但请在明显地位标记本文的原文连接。  

      者:Beniao

文章出处:http://beniao.cnblogs.com/   http://www.cnblogs.com/

 

 

内容概要:本文针对国内加密货币市场预测研究较少的现状,采用BP神经网络构建了CCi30指数预测模型。研究选取2018年3月1日至2019年3月26日共391天的数据作为样本,通过“试凑法”确定最优隐结点数目,建立三层BP神经网络模型对CCi30指数收盘价进行预测。论文详细介绍了数据预处理、模型构建、训练及评估过程,包括数据归一化、特征工程、模型架构设计(如输入层、隐藏层、输出层)、模型编译与训练、模型评估(如RMSE、MAE计算)以及结果可视化。研究表明,该模型在短期内能较准确地预测指数变化趋势。此外,文章还讨论了隐层节点数的优化方法及其对预测性能的影响,并提出了若干改进建议,如引入更多技术指标、优化模型架构、尝试其他时序模型等。 适合人群:对加密货币市场预测感兴趣的研究人员、投资者及具备一定编程基础的数据分析师。 使用场景及目标:①为加密货币市场投资者提供一种新的预测工具和方法;②帮助研究人员理解BP神经网络在时间序列预测中的应用;③为后续研究提供改进方向,如数据增强、模型优化、特征工程等。 其他说明:尽管该模型在短期内表现出良好的预测性能,但仍存在一定局限性,如样本量较小、未考虑外部因素影响等。因此,在实际应用中需谨慎对待模型预测结果,并结合其他分析工具共同决策。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值