MEF程序设计指南四:使用MEF声明导出(Exports)与导入(Imports)

MEF中,使用[System.ComponentModel.Composition.ExportAttribute]支持多种级别的导出部件配置,包括类、字段、属性以及方法级别的导出部件,通过查看ExportAttribute的源代码就知道ExportAttribute被定义为Attribute,并为其设置了使用范围。

[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Performance""CA1813:AvoidUnsealedAttributes")]
[AttributeUsage(AttributeTargets.Class | AttributeTargets.Field | AttributeTargets.Property | AttributeTargets.Method,
                AllowMultiple = 
true, Inherited = false
)]
public class
 ExportAttribute : Attribute
{
  
//......
}

 

  当任何一个类对象或是其内部的字段、属性、方法需要作为可组合部件的时候,就可以使用[ExportAttribute]将其标注为可导出部件。比如需要将一个对象做为可组合部件进行导出(就是类级别的导出),只需要在类上添加[ExportAttribute]就行了,详细的应用可参考《MEF中组合部件(ComposableParts)与契约(Contracts)的基本应用》,下面为演示代码:

[System.ComponentModel.Composition.Export]
public class DBLogger
{
}

 

  对于字段、属性级别的导出同类是一样的,通样使用[ExportAttribute]进行标注,下面代码块演示了一个完整的属性导入与导出的示例。

namespace MEFTraining.ExmprtImport
{
    
public partial class
 MainPage : UserControl
    {
        [Import(
"Name"
)]
        
public string BookName { getset
; }

        
public
 MainPage()
        {
            InitializeComponent();

            CompositionInitializer.SatisfyImports(
this
);

            MessageBox.Show(BookName);
        }
    }

    
public class
 BookService
    {
        [Export(
"Name"
)]
        
public string
 BookName
        {
            
get { return "MEF程序设计指南》"
; }
        }
    }
}

 

  方法级的导入与导出主要是利用委托实现,既ActionAction<T>,其使用也是非常简单的,无论是方法所需的参数还是返回值,都可以通过匿名委托去实现。如下代码中定义了一个BookService类,里面通过MEF导出了PrintBookName方法,且带有一个字符串类型参数,此时就可以通过匿名委托进行形参的和方法的导出。

public class BookService
{
    [Export(
typeof(Action<string
>))]
    
public void PrintBookName(string
 name)
    {
        Console.WriteLine(name);
    }
}

 

   在需要使用到此方法的地方,只需要通过匿名委托的方法对该方法进行导入就可以了,下面的代码是对上面的导出方法的调用示例。

public partial class MethodExportImport : UserControl
{
    [Import(
typeof(Action<string
>))]
    
public Action<string> PrintBookName { getset
; }

    
public
 MethodExportImport()
    {
        InitializeComponent();

        CompositionInitializer.SatisfyImports(
this
);

        PrintBookName(
"MEF程序设计指南》"
);
    }
}

 

   另外,MEF也支持继承的导入与导出应用,使用[System.ComponentModel.Composition.InheritedExportAttribute]实现基于继承的导出,其他的和字段、属性、方法级的应用完全一致,下面的代码演示了基于继承的导出与导出应用。

namespace MEFTraining.ExmprtImport
{
    
public partial class
 InheritedExportImport : UserControl
    {
        [Import]
        
public IUserServie UService { getset
; }

        
public
 InheritedExportImport()
        {
            InitializeComponent();
            CompositionInitializer.SatisfyImports(
this
);

            
string
 name = UService.GetUserName();
        }
    }

    [InheritedExport]
    
public interface
 IUserServie
    {
        
string
 GetUserName();
    }
    
public class
 UserService : IUserServie
    {
        
public string
 GetUserName()
        {
            
return "张三"
;
        }
    }
}

 

MEF还支持构造方法参数的导入,详细这里就不介绍了,有兴趣的可直接查询MEF英文版程序设计指南介绍。

 

 注:本文参考与MEF英文版程序设计指南,详细请查阅:Declaring Exports Declaring Imports  

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

  推荐指南:MEF程序设计指南一:在应用程序中宿主MEF

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

   MEF程序设计指南三:MEF中组合部件(ComposableParts)与契约(Contracts)的基本应用

 


相关说明
 

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

      者:Beniao

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

 

分数阶傅里叶变换(Fractional Fourier Transform, FRFT)是对传统傅里叶变换的拓展,它通过非整数阶的变换方式,能够更有效地处理非线性信号以及涉及时频局部化的问题。在信号处理领域,FRFT尤其适用于分析非平稳信号,例如在雷达、声纳和通信系统中,对线性调频(Linear Frequency Modulation, LFM)信号的分析具有显著优势。LFM信号是一种频率随时间线性变化的信号,因其具有宽频带和良好的时频分辨率,被广泛应用于雷达和通信系统。FRFT能够更精准地捕捉LFM信号的时间和频率信息,相比普通傅里叶变换,其性能更为出色。 MATLAB是一种强大的数值计算和科学计算工具,拥有丰富的函数库和用户友好的界面。在MATLAB中实现FRFT,通常需要编写自定义函数或利用信号处理工具箱中的相关函数。例如,一个名为“frft”的文件可能是用于执行分数阶傅里叶变换的MATLAB脚本或函数,并展示其在信号处理中的应用。FRFT的正确性验证通常通过对比变换前后信号的特性来完成,比如评估信号的重构质量、信噪比等。具体而言,可以通过计算原始信号经过FRFT处理后的信号之间的相似度,或者对比LFM信号的关键参数(如初始频率、扫频率和持续时间)是否在变换后得到准确恢复。 在MATLAB代码实现中,通常包含以下步骤:首先,生成LFM信号模型,设定其初始频率、扫频率、持续时间和采样率等参数;其次,利用自定义的frft函数对LFM信号进行分数阶傅里叶变换;接着,使用MATLAB的可视化工具(如plot或imagesc)展示原始信号的时域和频域表示,以及FRFT后的结果,以便直观对比;最后,通过计算均方误差、峰值信噪比等指标来评估FRFT的性能。深入理解FRFT的数学原理并结合MATLAB编程技巧,可以实现对LFM信号的有效分析和处理。这个代码示例不仅展示了理论知识在
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值