`
jiq408694711
  • 浏览: 36520 次
  • 性别: Icon_minigender_1
  • 来自: 南京
文章分类
社区版块
存档分类
最新评论

Managed Extensibility Framework (MEF)

 
阅读更多

最近C#项目遇到一个问题,我编写了一个开机启动的服务,有两个目的:

(1)客户端运行时需要用到一些缓存,但是这些缓存的加载(从服务器端获取)有些耗时,所以就想要开启一个服务在客户端打开之前就开始获取这些缓存,等到客户端启动的时候将这些缓存通过命名管道传递给他。 这些缓存包括数据字典,用户信息,等等,以后可能还会有更多的缓存;

(2)后台运行的一个客户端代理服务的界面(托盘形式)需要显示这些缓存当前的状态,比如数据字典有多少,是否正常,刷新时间是多少等等。我们的这个windows服务就在获取了缓存之后构造出缓存状态信息通过命名管道传递给这个托盘让它来显示。


问题是我们目前虽然已经确定了有数据字典缓存,但是以后可能还会增加新的缓存,不可能每次增加一种缓存,我们都修改编写的这个服务,添加获取新类型缓存的代码,以后构造其状态信息结构的代码。

所以为了可拓展性,我决定这样做:

(1)为所有缓存获取者编写一个接口ICacheGetter,包含方法DataSet getCache() ; 以后增加新的缓存的时候,就让其他人编写新的缓存获取类继承自这个接口;

(2)针对缓存状态信息构造,也定义这样一个接口ICacheStatInfoBuilder,包含一个方法string buildCacheStatStr(DataSet cache); 将缓存作为参数传递进去,让其他人编写根据缓存内容构造缓存状态信息描述字符串的方法的实现;

所有的缓存获取者(ICacheGetter实现类)都需要将自己配置到一个配置文件中,同样所有的缓存状态信息构造者(ICacheStatInfoBuilder实现类)也需要将自己配置到对应的配置文件中。


然后我的服务只需要负责:

(1)通过XMLDocument类来读取配置文件,通过反射机制实例化所有的缓存获取者,并调用它的缓存获取方法,并将获取的DataSet存放到Dictionary<string,DataSet>中,通过命名管道将这个存储了所有缓存的容器发送给客户端;

(2)通过XMLDocument类来读取配置文件,通过反射机制实例化所有的缓存信息构造者,并调用它的缓存状态信息构造方法,并将构造好缓存状态信息描述字符串存放到Dictionary<string,string>中,通过命名管道将这个存储了所有缓存状态信息字符串的容器发送给托盘;

(PS:应该也可以用注册/通知,或者说订阅/发布的模式来实现)

想好之后我就准备开始动手了,没想到和头儿沟通之后,发现可以用非常简单的方式来解决我的这个问题,没错,就是MEF


使用EMF解决这个问题大概是要做以下步骤 :

1 所有的缓存获取者/缓存状态信息构造者 都将自己Export出来;

2 在windows服务中申明一个类型为ICacheGetter/ICacheStatInfoBuilder的列表容器;

3 调用一段代码(从官网拷贝),这段代码的作用就是扫描所有的指定目录下面的dll,找到申明了Export的类之后,将它的实例注入到对应的2中申明的容器中;

OK,这样你就可以直接迭代容器,访问其中的对象,调用其方法了,很简单啊有木有!

这个应该就和Java总Spring的依赖注入一个原理,通过加载dll,利用反射技术创建类对象,注入到对应的容器中。


关于更多MEF的信息请查看:http://msdn.microsoft.com/zh-cn/library/vstudio/dd460648.aspx

(转载请注明出处,jiq)

Managed Extensibility Framework 或 MEF 是一个用于创建可扩展的轻型应用程序的库。应用程序开发人员可利用该库发现并使用扩展,而无需进行配置。扩展开发人员还可以利用该库轻松地封装代码,避免生成脆弱的硬依赖项。通过 MEF,不仅可以在应用程序内重用扩展,还可以在应用程序之间重用扩展。


分享到:
评论

相关推荐

    MEF(Managed Extensibility Framework)入门教程

    MEF(Managed Extensibility Framework)是微软.NET框架下的一个受管理扩展性框架,主要用于提高应用程序和组件的复用程度。它最初是作为.NET Framework 4.0的一部分推出的,但由于其强大功能,在.NET 3.5版本中也...

    使用Managed Extensibility Framework方便的扩展应用程序

    使用Managed Extensibility Framework方便的扩展应用程序

    Managed Extensibility Framework(MEF)

    Managed Extensibility Framework (MEF) 是.NET框架中一个强大的组件化和插件化工具,由微软开发并随.NET Framework 4.0一同发布。它为开发者提供了在应用程序中实现可扩展性和模块化的能力,使得代码更加灵活,易于...

    Managed Extensibility Framework基础入门-个人笔记

    Managed Extensibility Framework (MEF) 是 .NET Framework 提供的一个组件,用于构建可扩展的应用程序。MEF 提供了一种方式,使得开发者可以轻松地将应用程序的不同部分解耦,以便于外部组件或插件可以无缝地插入到...

    Managed Extensibility Frameword (MEF)

    MEF全称Managed Extensibility Framework(受管理扩展性框架),是微软.NET框架下为提高应用和组件复用程度而推出的。使用MEF能够使静态编译的.NET应用程序转换为动态组合,这将是创建可扩展应用、可扩展框架和应用...

    Mef_MEFwinForm_

    【标题】"Mef_MEFwinForm_"是一个关于C#编程中的 Managed Extensibility Framework (MEF) 应用于Windows Forms应用的示例项目。这个标题暗示了它将展示如何在WinForm应用中利用MEF来实现插件化架构。 【描述】"c#的...

    MAF_MEF_示例程序

    微软MAF——Managed Add-in Framework;...微软MEF——Managed Extensibility Framework; 本资源含2个MAF示例程序和1个MEF示例程序,在VS2010和VS2017下均编译通过。学习插件开发框架的同学们,绝对物超所值。

    MEF Console Example

    本文将深入探讨“MEF Console Example”这一主题,它是一个基于Managed Extensibility Framework(MEF)构建的可扩展性极强的Windows Presentation Foundation(WPF)主机程序。MEF是.NET Framework的一个组件,主要...

    一个简单的 Silverlight 4 应用程序(MEF+ MVVM+ WCF RIA Services)源代码及安装文件

    Silverlight 4 应用程序(MEF+ MVVM+ WCF RIA Services)源代码及安装文件" 这个标题表明我们正在讨论一个基于 Silverlight 4 的应用程序,它利用了三个关键的技术:Managed Extensibility Framework (MEF),...

    WPF 使用Caliburn.Micro搭建MEF插件化框架

    在本文中,我们将深入探讨如何使用WPF(Windows Presentation Foundation)结合Caliburn.Micro和MEF(Managed Extensibility Framework)构建一个可插拔的框架。这些技术可以帮助开发者创建灵活、可扩展的应用程序,...

    Silverlight Mef Demo

    Microsoft Expression Blend的Silverlight技术结合Managed Extensibility Framework (MEF) 提供了一种强大的方式来创建高度可扩展的应用程序。"Silverlight Mef Demo"就是这样一个示例,它展示了如何利用MEF来构建一...

    WPF MvvM 使用 MEF 构建插件Demo

    为了进一步增强应用的灵活性,开发者常常会采用插件架构,其中Managed Extensibility Framework (MEF) 是.NET Framework中一个强大的工具,用于实现这一目标。这个“WPF MvvM 使用 MEF 构建插件Demo”就是展示如何在...

    MEF 简单实例

    托管扩展性框架(Managed Extensibility Framework,简称MEF),是微软.NET框架下为提高应用和组件复用程度而推出的,用于使组件能够最大化的重用。使用MEF能够使静态编译的.NET应用程序转换为动态组合,这将是创建...

    mef与wcf整合

    **MEF(Managed Extensibility Framework)与WCF(Windows Communication Foundation)整合** MEF(Managed Extensibility Framework)是.NET Framework中一个用于构建可扩展应用程序的库,它允许开发者在运行时...

    MEF导入usercontrol及服务

    Managed Extensibility Framework(MEF)是.NET Framework的一个组件,它提供了一种简单且强大的方式来实现这些目标。本文将深入探讨如何使用MEF在WPF应用中导入UserControl以及接口服务。 **1. MEF简介** MEF,...

    MEF+Caliburn.Micro+Validation+AOP

    在IT领域,特别是Windows Presentation Foundation (WPF)的开发中,`MEF`(Managed Extensibility Framework)、`Caliburn.Micro`、`Validation` 和 `AOP`(Aspect-Oriented Programming) 是四个关键的概念,它们在...

    wcf,entityframework,mef,mvc框架源码含仓储模式

    “MEF”即Managed Extensibility Framework,是.NET Framework的一个组件,旨在提供一种简单、灵活的方式来实现应用程序的扩展性。MEF允许开发者通过插件或模块化的方式添加新功能,或者替换现有功能,使得软件更加...

    Sample : Ria Services + MVVM + MEF

    【标题】"Sample : Ria Services + MVVM + MEF" 涉及的是一个使用Silverlight 4.0、WCF RIA Services 4.0、MVVM(Model-View-ViewModel)模式以及MEF(Managed Extensibility Framework)构建的示例项目。...

    C# MEF使用实例

    **C# MEF(Microsoft Managed Extensibility Framework)使用实例** C# MEF,全称为Microsoft Managed Extensibility Framework,是.NET Framework的一部分,主要用于构建可扩展的应用程序。它提供了一种方便的方式来...

    WCF 服务管理中心

    **WCF 服务管理中心**是基于Windows Communication Foundation(WCF)技术构建的一个系统,它采用Managed Extensibility Framework (MEF) 来实现服务插件的动态管理和加载。这个中心允许用户通过图形用户界面(GUI)...

Global site tag (gtag.js) - Google Analytics