如何使用托管扩展框架

最近听到很多关于托管扩展框架的描述,虽然很多人明白它的意思,但是却不理解该工具的工作原理。这一工具能帮助客户向WPF程序添加自己的表单吗?我们的菜单中需要这些新表单不过不希望VB源代码被客户重新编译。本文会教大家如何使用托管扩展框架。

听起来这似乎是对MEF的有效应用。你也可以使用相同的方法来应用到WinForms或ASP.NET中,而且c#代码与下文要展示的代码相似。

MEF是一种能够通过简单模型使元件进行互动的扩展模型。MEF会调用部分元件。MEF对于不同模式类型都具有可扩展性,但同时会配备一个属性模型。这样你就可以通过.NET属性定义部件的互动。如果某部件需要什么,它会使用Import属性,如果部件要供给什么,它会使用Export属性。任何部件都可用作主机或客户端,供应商或客户。MEF的这些互动以协议会基础并提供灵活的发掘模型。你的应用程序会向MEF发送请求以提供执行。这样应用程序就可以脱离依赖并让你进行替换执行。

MEF目前还只是在CodePlex上作为一个预览版推出。它位于System.ComponentModel命名空间中,这表明它将会以.NET Framework 4.0中的正式一员出现。某些微软项目都将与之相关,包括VS 2010代码编辑器。在它还未出现在.NET框架中以前,我们都需要下载MEF并将 System.ComponentModel.Composition.dll放到可访问的文章。你还要意识到应用程序接口可能会发生变化。

应用程序将是MEF的主机而客户会写出MEF客户端或扩展。扩展要易于写客户端因为主机必须管理CompositionContainer。我们会按照创建接口,创建扩展,创建WPF主机的步骤来讲解整个过程。WPF主机会向CompositionContainer穿送一个目录,它会指定用于搜索菜单扩展的目录。

扩展支持所订立的协议。最普遍的协议是接口,而这些接口都很简单。

Public Interface IExtension
   Sub ShowWindow()
   End Interface
   客户可以通过执行这一接口来添加扩展并从System.ComponentModel.Composition命名空间中指定Export属性:
   Export(GetType(IExtension))> _
    _
   Partial Public Class First
   Implements IExtension
   Public Sub ShowWindow() _
   Implements Common.IExtension.ShowWindow
   End Sub
   End Class

你也可以使用任意字符串来确定输出,但是最普遍的扩展是通过一个接口协议来检索。ExportMetadata属性会包含主机能够检索的额外扩展信息,而不需要真正地展示基本对象,这样可以让我们控制示例并保护性能。

设计方案时,将接口设置为由主机和所有扩展组件单独引用。不要在主机和扩展之间建立直接的引用。所有的组件都需要引用 System.ComponentModel.Composition.dll。编译的扩展要放在方便的位置。你可以在属性属性对话框中指定建立的位置。

主机要管理CompositionContainer。CompositionContainer接通幕后的输入与输出,而且它必须了解所能获取的输出。创建一个容器项目级别的变量以清理OnExit。对容器Dispose方法调用会处理所有执行IDisposable的部件:

Protected Overrides Sub OnExit( _
   ByVal e As System.Windows.ExitEventArgs)
   MyBase.OnExit(e)
   If mContainer IsNot Nothing Then
   mContainer.Dispose()
   End If
   End Sub

时间: 2024-11-29 12:26:34

如何使用托管扩展框架的相关文章

托管可扩展性框架

在.NET 4中使用托管可扩展性框架构建可组合的应用程序 托管可扩展性框架 (MEF) 是 .NET Framework 4 和 Silverlight 4 中新增的一个库,用于 简化在部署后可由第三方进行扩展的可组合系统的设计.MEF 可使您的应用程序具有开放性, 从而允许应用程序开发人员.框架编写者以及第三方扩展程序不断引入新功能. 构建托管可扩展性框架的原因 几年前,在 Microsoft 内部,一些小组致力于为一个问题找到解决方案,即如何基于可重 用的组件构建可动态发现.重用和组合的应用

使用C++的托管扩展针对Windows窗体编程

摘要:本文讨论了如何使用 Visual C++ .NET 的托管扩展针对 Windows 窗体编程,并提供了使用直接访问 Windows 窗体类的手动编程技术的示例,以及使用 Windows 窗体设计器的示例.此外,本文还对 Windows 窗体和 Microsoft 基础类 (MFC) 应用程序进行了比较. 简介 长期以来,程序员们都使用 C 和 C++ 来开发 Windows GUI 应用程序.对于我们当中很多人来说,这一段历史可以追溯到 Windows 2.0 时期,那时,我们使用基于 C

持续化更新的视状态,在DLL中使用托管扩展

持续化更新的视状态 在DLL中使用托管扩展 这个月是我的专栏11周年纪念以及新标题:"C++ At Work"的开幕式.同时我们还新增了一个新的双月专栏:"Pure C++",这个专栏由我的伙伴,C++ 大师级人物之一-- Stan Lipman 主持.Stan 将更多地涉及纯粹的 C++/CLI 语言方面(他会告诉你更多这方面的东西),而我将继续一如既往地编写 C++ 日常应用以及现实中的MFC(和目前的托管扩展)Windows 编程方面的文章.Stan 的新专栏

Accord.NET Framework 2.6.0发布 扩展框架

Accordhttp://www.aliyun.com/zixun/aggregation/13480.html">.NET 是一个采用C语言编写的AForge.NET 扩展框架,用于计算机视觉算法和机器学习.它提供了大量的统计分析.人工智能和处理功能,以及图像处理和计算机视觉算法.该框架由有多个库和演示应用程序组成. Accord.NET Framework 2.6.0该版本增加了RANSAC HCRFs的支持,为解决制约QP的优化问题的戈德法布Idnani方法,除了在许多优化SVM学习

PHP扩展框架之Yaf框架的安装与使用_php实例

安装 windows下载扩展:https://pecl.php.net/package/yaf/2.2.9/windows 根据自己的电脑系统和php的版本号选择,NTS是线程不安全,TS是线程安全 根据phpinfo(),选择是否是线程安全 把php_yaf.dll扩展放到ext目录下 重启apache 使用 新建目录public,新建文件index.php入口文件 <?php define("APP_PATH", realpath(dirname(__FILE__) . '/

PHP扩展框架之Yaf框架的安装与使用

安装 windows下载扩展:https://pecl.php.net/package/yaf/2.2.9/windows 根据自己的电脑系统和php的版本号选择,NTS是线程不安全,TS是线程安全 根据phpinfo(),选择是否是线程安全 把php_yaf.dll扩展放到ext目录下 重启apache 使用 新建目录public,新建文件index.php入口文件 <?php define("APP_PATH", realpath(dirname(__FILE__) . '/

一个用于格式化/统计文本的可扩展框架

说明 本文为TextFormator Framework的说明文档,原名<TextFormator Framework Introduce>,您同样可以在如下网址处找到有关TextFormator的详细信息,包括源码以及本文: 引言 萌发编写TextFormator的最初原因和以下两件事情有关: 1.年初的时候曾在csdn的论坛上提过一个问题,内容是询问哪里有好的"代码统计分析工具",当时并没有得到什么回应. 2.前段时间,一个同事向我展示了他在业余时间编写的一个小工具,其

详解WCF可扩展框架中的行为扩展

WCF以其灵活的可扩展架构为开发者提供了方便,其中对行为的扩展或许是应用中最为常见的.自定义 对行为的扩展并不复杂,但仍有许多细节需要注意. 在服务端,一般是对DispatchRuntime和DispatchOperation进行扩展,扩展点包括了对参数和消息的 检查,以及操作调用程序, 它们对应的接口分别为IParameterInspector,IDispatchMessageInspector 以及 IOperationInvoker.而在客户端,则是对ClientRuntime和Clien

一起谈.NET技术,分享一些非常好用的Visual Studio扩展

扩展管理器 Visual Studio 2010新增"扩展管理器"的功能,可用于添加.移除.启用和禁用Visual Studio扩展.我们可以从Visual Studio Gallery(Visual Studio库)网站上安装扩展,这些扩展一般是VSIX包格式,包括项目模板.项模板.工具箱项.托管扩展框架(MEF)组件和VSPackage.安装在"Visual Studio安装文件夹\Common7\IDE\Extensions\Company\Product\Versio