- 浏览: 667000 次
- 性别:
- 来自: 石家庄
文章分类
最新评论
-
abao1:
老贾 在安装IDEA的过程中,在激活步骤时,按如下操作即可: ...
IntelliJ IDEA 2016注册方法和注册码 -
bo_hai:
./usr/bin/java: symbol lookup ...
jmagick安装步骤 -
wxcking:
不错的, 收藏一下
JAVA使用POI生成Excel文件 -
zgyfh:
大哥,密码是多少啊?zgyfh@tom.com谢谢了!新手学习 ...
WPF做的必备示例 -
记忆无泪:
jiasongmao 写道你的邮箱是多少,我可以发源代码到邮箱 ...
WPF做的必备示例
本文章非原创,转载自:
作 者:Beniao
文章出处:http://beniao.cnblogs.com/ 或 http://www.cnblogs.com/
在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中组合部件(Composable Parts)与契约(Contracts)的基本应用 》,下面为演示代码:
[System.ComponentModel.Composition.Export] public class DBLogger { }
对于字段、属性级别的导出同类是一样的,通样使用[ExportAttribute]进行标注,下面代码块演示了一个完整的属性导入与导出的示例。
namespace MEFTraining.ExmprtImport { public partial class MainPage : UserControl { [Import("Name")] public string BookName { get; set; } public MainPage() { InitializeComponent(); CompositionInitializer.SatisfyImports(this); MessageBox.Show(BookName); } } public class BookService { [Export("Name")] public string BookName { get { return "《MEF程序设计指南》"; } } } }
方法级的导入与导出主要是利用委托实现,既Action或Action<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 { get; set; } 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 { get; set; } 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英文版程序设计指南介绍。
发表评论
-
silvelright酷站
2011-03-22 18:47 802http://completit.com/# -
silverlight翻转代码
2011-03-13 18:46 1112using System; using System.Net ... -
silverlight独立存储示例
2011-03-07 17:17 1050void CreateDir(string dirNam ... -
silverlight SDK和toolit中控件英文如何转换为英文
2010-11-11 15:50 990解决方法: 设置 ... -
Silverlight4:网络地图服务
2010-10-16 11:01 1584Bing Maps与Google Earth一样 ... -
通过JS创建silverlight对象
2010-10-12 13:04 1649前言: 对于我们开发的silverlight应用来讲,有的时 ... -
silverlight childwindow源码
2010-09-18 21:17 1964<!-- // (c) Copyright Micro ... -
精彩的 Silverlight 开源项目
2010-08-18 14:32 2920Silverlight 物理模型 http://www.c ... -
MEF程序设计指南五:迟延(Lazy)加载导出部件(Export Part)与元数据(Metadata)
2010-08-12 10:34 931本文章非原创,转载自: 作 者:Beniao 文 ... -
MEF程序设计指南三:MEF中组合部件(Composable Parts)与契约(Contracts)的基本应用
2010-08-12 09:52 543本文章非原创,转载自: 作 者:Beniao 文 ... -
MEF程序设计指南二:Silverlight中使用CompositionInitializer宿主MEF
2010-08-12 09:24 857本系列文章非原创,转载自: 作 者:Beniao ... -
MEF程序设计指南一:在应用程序中宿主MEF
2010-08-12 09:17 1023本系列文章非原创,转 ... -
silverlight应用程序库缓存
2010-08-10 14:22 1510应用程序库缓存可在用户重新访问网站时帮助改善启动性能。 ... -
Prism动态模块加载
2010-08-10 10:27 1632这篇介绍模块在silverlight的特殊应用. sil ... -
Silverlight中Json数据的转换方法(中文)
2010-08-04 11:36 1238[DataContract] public clas ... -
silverlight万花筒效果
2010-07-28 16:14 883见附件。 -
silverlight如何将颜色字符串转换为颜色
2010-07-02 10:42 1533public class ColorUtil { ... -
silverlight中Tab转Enter的实现方法
2010-06-04 17:38 1725silverlight项目中要求界面全键盘操作,并且在光标移动 ... -
在两个Silverlight应用间数据通信(包括与Flash通信)
2010-05-13 17:06 1004声明:该博文转载自:http://daizhj.blog.51 ... -
silverlight和js相互调用
2010-05-13 16:56 1674步骤一:在silverlight后台代码类中声明被js调用的方 ...
相关推荐
MEF通过引入元数据(Metadata)和导出(Exports)与导入(Imports)的概念,允许代码之间进行松散耦合,从而增强了软件的灵活性和可维护性。 ### 1. MEF的核心概念 #### 导出(Exports) 导出是MEF中的关键概念,...
它通过元数据(metadata)和导出(exports)与导入(imports)的概念,实现了组件之间的松耦合。 **WPF(Windows Presentation Foundation)** 是.NET Framework的一部分,用于构建具有丰富图形界面的桌面应用程序...
通过使用特性标记,可以在类的成员上声明导入。 3. **导出(Exports)**:当一个部件提供了一个可以被其他部件使用的功能或数据时,我们就说它进行了导出。同样,导出也是通过特性来标记的。 4. **容器(Container...
这些部件可以包含导出(Exports)和导入(Imports)。 2. **导出(Exports)**:部件提供给其他部件使用的功能或数据。通过使用 `[Export]` 属性标记,你可以指定一个类型或成员作为导出。例如,你可以导出一个实现...
2. **导出(Exports)**: 部件通过使用`[Export]`特性标记成员(如类、方法或属性),声明它可以提供给其他部件使用。 3. **导入(Imports)**: 部件通过使用`[Import]`或`[ImportMany]`特性标记成员,声明它对其他...
3. **导入(Imports)**:如果一个部件需要依赖其他部件的服务,它可以通过`[Import]`或`[ImportMany]`特性声明导入。`[Import]`用于单一依赖,`[ImportMany]`则用于一组依赖。 4. **目录(Catalogs)**:目录是MEF...
10. **Composable Parts(可组合部件)**:这是MEF设计模式中的关键概念,意味着任何.NET对象都可以是一个Part,只要它声明了导入和导出。 MEFTraining.CPC.rar中的内容可能包括了MEF的教程、示例代码、练习以及...
3. **导入(Imports)**:通过使用`[Import]`或`[ImportMany]`特性,组件可以声明对其他导出的依赖。MEF会自动匹配这些依赖并注入适当的组件实例。 4. **容器(Container)**:MEF的容器负责管理所有组件的生命周期...
综上所述,"MEFCatalogs.rar"的"006 MEF Catalogs"文件可能会涵盖这些主题,详细解释如何使用MEF来创建可扩展的应用程序,以及如何设计和管理Catalogs来实现部件之间的协作。学习和理解MEF Catalogs对于构建模块化、...
综上所述,`MEFTraining.MefCatalogs.rar`可能是关于如何使用和理解MEF框架的一系列教程或示例代码,涵盖了MEF的各个方面,包括Catalogs的创建和管理、部件的导入导出、元数据使用、CompositionContainer的应用以及...
2. **导入(Imports)**:导入使用 `[Import]` 或 `[ImportMany]` 属性来声明一个类需要依赖的导出。单个导入(Single Import)用 `[Import]` 表示,可以匹配一个导出;多个导入(Multiple Import)用 `[ImportMany]...