- 浏览: 670950 次
- 性别:
- 来自: 石家庄
文章分类
最新评论
-
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其实非常简单,只需要创建一个组合容器对象(CompositionContainer)的实例,然后将需要组合的部件 (Parts)和当前宿主程序添加到容器中即可。首先需要添加MEF框架的引用,既
System.ComponentModel.Composition.dll,详细如下代码块: private void Compose() { var catalog = new AssemblyCatalog(Assembly.GetExecutingAssembly()); var container = new CompositionContainer(catalog); container.ComposeParts(this); }
通过上面的代码实现就可以完成MEF的宿主,实际上在使用MEF的开发过程中并不会如此简单的应用。可能会定义一个或多个导入(Import) 和导出(Export)部件,然后通过MEF容器进行组合,其实也可以理解为“依赖注入”的一种实现。比如定义一个图书接口和一个接口的实现类,在此基础 上使用MEF的导入导出特性:
<!-- <br/ /><br/ />Code highlighting produced by Actipro CodeHighlighter (freeware)<br/ />http://www.CodeHighlighter.com/<br/ /><br/ />-->
public interface IBookService { void GetBookName(); } /// <summary> /// 导入 /// </summary> [Export(typeof(IBookService))] public class ComputerBookService : IBookService { public void GetBookName() { Console.WriteLine("《Hello Silverlight》"); } }
如上代码通过使用MEF的[System.ComponentModel.Composition.Export]对接口的实现进行导出设置, 让接口的实现以容器部件的方式存在,然后通过组合容器进行装配加载,这个过程中就包括了接口的实例化的过程。接下来就需要在MEF的宿主程序中定义一个接 口的属性,并为其标注[System.ComponentModel.Composition.Import]特性以实现接口实现类的导入。如下代码块:
<!-- <br/ /><br/ />Code highlighting produced by Actipro CodeHighlighter (freeware)<br/ />http://www.CodeHighlighter.com/<br/ /><br/ />-->
/// <summary> /// 导入接口的实现部件(Part) /// </summary> [Import] public IBookService Service { get; set; }
完成了导入导出的接口与实现的开发及特性配置,下面就剩下一步组合了,也就是本文提到的将部件和宿主程序自身添加到组合容器中,以实现导入(Import)和导出(Export)的组合装配。
<!-- <br/ /><br/ />Code highlighting produced by Actipro CodeHighlighter (freeware)<br/ />http://www.CodeHighlighter.com/<br/ /><br/ />-->
/// <summary> /// 宿主MEF并组合部件 /// </summary> private void Compose() { var catalog = new AssemblyCatalog(Assembly.GetExecutingAssembly()); var container = new CompositionContainer(catalog); //将部件(part)和宿主程序添加到组合容器 container.ComposeParts(this,new ComputerBookService()); }
通过以上步骤就完成了MEF的宿主以及一个简单的部件组合的应用示例,下面是本文的完整代码示例:
<!-- <br/ /><br/ />Code highlighting produced by Actipro CodeHighlighter (freeware)<br/ />http://www.CodeHighlighter.com/<br/ /><br/ />-->
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.ComponentModel.Composition; using System.ComponentModel.Composition.Hosting; using System.Reflection; namespace HostingMef { public interface IBookService { void GetBookName(); } /// <summary> /// 导入 /// </summary> [Export(typeof(IBookService))] public class ComputerBookService : IBookService { public void GetBookName() { Console.WriteLine("《Hello Silverlight》"); } } class Program { /// <summary> /// 导入接口的实现部件(Part) /// </summary> [Import] public IBookService Service { get; set; } /// <summary> /// 宿主MEF并组合部件 /// </summary> private void Compose() { var catalog = new AssemblyCatalog(Assembly.GetExecutingAssembly()); var container = new CompositionContainer(catalog); //将部件(part)和宿主程序添加到组合容器 container.ComposeParts(this,new ComputerBookService()); } static void Main(string[] args) { Program p = new Program(); p.Compose(); p.Service.GetBookName(); } } }
发表评论
-
silvelright酷站
2011-03-22 18:47 808http://completit.com/# -
silverlight翻转代码
2011-03-13 18:46 1115using System; using System.Net ... -
silverlight独立存储示例
2011-03-07 17:17 1060void CreateDir(string dirNam ... -
silverlight SDK和toolit中控件英文如何转换为英文
2010-11-11 15:50 992解决方法: 设置 ... -
Silverlight4:网络地图服务
2010-10-16 11:01 1605Bing Maps与Google Earth一样 ... -
通过JS创建silverlight对象
2010-10-12 13:04 1664前言: 对于我们开发的silverlight应用来讲,有的时 ... -
silverlight childwindow源码
2010-09-18 21:17 1968<!-- // (c) Copyright Micro ... -
精彩的 Silverlight 开源项目
2010-08-18 14:32 2925Silverlight 物理模型 http://www.c ... -
MEF程序设计指南五:迟延(Lazy)加载导出部件(Export Part)与元数据(Metadata)
2010-08-12 10:34 954本文章非原创,转载自: 作 者:Beniao 文 ... -
MEF程序设计指南四:使用MEF声明导出(Exports)与导入(Imports)
2010-08-12 10:03 650本文章非原创,转载自: 作 者:Beniao 文 ... -
MEF程序设计指南三:MEF中组合部件(Composable Parts)与契约(Contracts)的基本应用
2010-08-12 09:52 568本文章非原创,转载自: 作 者:Beniao 文 ... -
MEF程序设计指南二:Silverlight中使用CompositionInitializer宿主MEF
2010-08-12 09:24 860本系列文章非原创,转载自: 作 者:Beniao ... -
silverlight应用程序库缓存
2010-08-10 14:22 1525应用程序库缓存可在用户重新访问网站时帮助改善启动性能。 ... -
Prism动态模块加载
2010-08-10 10:27 1665这篇介绍模块在silverlight的特殊应用. sil ... -
Silverlight中Json数据的转换方法(中文)
2010-08-04 11:36 1243[DataContract] public clas ... -
silverlight万花筒效果
2010-07-28 16:14 893见附件。 -
silverlight如何将颜色字符串转换为颜色
2010-07-02 10:42 1535public class ColorUtil { ... -
silverlight中Tab转Enter的实现方法
2010-06-04 17:38 1734silverlight项目中要求界面全键盘操作,并且在光标移动 ... -
在两个Silverlight应用间数据通信(包括与Flash通信)
2010-05-13 17:06 1008声明:该博文转载自:http://daizhj.blog.51 ... -
silverlight和js相互调用
2010-05-13 16:56 1677步骤一:在silverlight后台代码类中声明被js调用的方 ...
相关推荐
在Windows Presentation Foundation(WPF)开发中,Microsoft Managed Extensibility Framework(MEF)是一种强大的工具,用于实现应用程序的模块化和插件化。MEF提供了一种灵活的方式,使得组件之间可以互相发现和...
在本篇中,我们将探讨MEF的基本概念、如何导入和导出部件,以及如何在控制台应用程序中实现一个简单的MEF应用。 **MEF的核心概念** 1. **部件(Parts)**:在MEF中,任何可以被导入和导出的对象都被称为部件。部件...
**MEF(Managed Extensibility Framework)与MVVMLight结合使用是现代Windows应用程序开发中的一个常见实践,尤其在WPF和Silverlight项目中。MEF是一个用于构建可扩展应用程序的.NET框架,而MVVMLight则是一个轻量级...
6. **部分类(Part)**:在MEF中,组件通常被称为“部分”,因为它们可以是整个应用程序的一部分,每个部分都可能独立地被替换或扩展。 7. **目录(Catalog)**:目录是包含组件定义的集合,它可以是基于文件系统、...
例如,以下代码展示了如何在Silverlight应用中使用MEF: ```csharp [Export(typeof(IUserInterface))] public partial class MainPage : UserControl, IUserInterface { [Import] public IBackendService ...
在WPF中结合MEF,我们可以创建一个允许外部插件(通常是DLL形式)来扩展应用程序核心功能的系统。 标题"使用MEF方式实现插件化加载控件"指的是,将特定的WPF控件开发为单独的类库项目,编译成DLL文件。这些DLL文件...
- **MEF(Managed Extensibility Framework)**:是.NET Framework中的一个新库,旨在提高应用程序和组件的重用能力。通过使用MEF,.NET应用能够从静态编译转变为动态组合。 - **软件开发与维护的挑战**: - 原始...
"Silverlight Mef Demo"为初学者提供了一个直观的示例,展示如何在Silverlight应用中集成MEF,以及如何设计和实现可扩展性。通过研究这个示例,开发者可以更好地理解MEF的工作原理,以及如何在实际项目中应用MEF来...
2. 灵活性:MEF 提供了一种灵活的方式来组合不同的组件,以创建一个功能强大且灵活的应用程序。 3. 松耦合:MEF 使得组件之间的耦合度降低,提高了系统的可维护性和可扩展性。 结论 MEF 是一个功能强大且灵活的...
- **组合(Composition)**:MEF将所有部件按照依赖关系组合在一起,形成一个运行时的组件网络。 ### 3. MEF的使用场景 MEF常用于以下场景: - **插件架构**:允许用户添加、删除或替换应用程序的功能模块,无需...
- **插件架构(Plugin Architecture)**:MEF提供了一种机制,允许应用程序在运行时发现和加载外部组件,这些组件可以在不修改主应用程序的情况下添加新功能或扩展已有功能。 - **导出(Export)和导入(Import)**...
3. **配置MEF**:在主应用程序中,配置MEF容器以扫描插件目录并加载实现指定接口的程序集。这可以通过`DirectoryCatalog`实现,它会加载指定目录下的所有dll文件。 4. **使用Caliburn.Micro集成MEF**:通过`...
最后,你需要提供一个实现了`IMyService`接口的类,并在应用程序的某个地方Export它,这样MEF才能在运行时找到并传递给UserControl。例如: ```csharp [Export(typeof(IMyService))] public class ...
**MEF(Managed Extensibility Framework)** 是微软推出的一个扩展性框架,它允许开发者在应用程序中方便地引入和管理插件或者模块。MEF 主要用于构建可扩展的应用程序,使得第三方开发者能够轻松地为应用程序添加...
3. **易于扩展**:MEF提供了一种简洁的方式来进行扩展,而不会影响到核心应用逻辑。 4. **简化配置**:相比传统的依赖注入框架,MEF简化了配置过程,减少了代码量和复杂度。 总之,MEF为.NET平台带来了强大的扩展性...
在 Silverlight 应用中,MEF 可用于动态加载和管理插件,使应用程序能够适应未来的变化和扩展。 **Model-View-ViewModel (MVVM)** MVVM 是一种软件设计模式,特别适用于 XAML 基础的 UI 框架,如 Silverlight。在...
【描述】"c#的插件小例子程序,方便新手学习插件入门"表明这个项目是为初学者设计的,旨在帮助他们理解和掌握MEF在创建可扩展的、模块化的Windows Forms应用中的基本用法。通过这个例子,开发者可以学习到如何将应用...
Managed Extensibility Framework (MEF) 是 .NET Framework 4.0 中引入的一个组件,它提供了一种简单而灵活的方式来实现应用程序的扩展性和插件架构。MEF 可以帮助开发者轻松地发现、组合和重用应用程序组件,而无需...
通过MEF,可以有效地管理和组装应用程序的各个部分,不管是将应用程序设计为能够接受各种插件,还是将功能模块化以便于复用,MEF都能够提供出色的支持。随着.NET技术的不断发展,MEF作为.NET生态系统中的一个重要...
**MVVM模式与Mef插件在WPF中的应用** MVVM(Model-View-ViewModel)模式是软件开发中一种流行的设计模式,特别是在WPF(Windows Presentation Foundation)平台下,它能够有效地分离用户界面(View)和业务逻辑...