MEF简介 MEF,全称Managed Extensibility Framework(托管可扩展框架)。...单从名字我们不难发现:MEF是专门致力于解决扩展性问题的框架,MSDN中对MEF有这样一段说明: Managed Extensibility Framework 或 MEF 是一个用于创建可扩展的轻型应用程序的库...定义了接口,里面一个是字符串类型Text,还有一个方法是DO;然后我们增加插入时继承接口即可 ---- 然后返回主程序里面的Form里声明我们的接口 ? 然后我们写窗体调用加载插件的初始化方法 ?...读完插件后加载到MenuStrip控件中用于显示出来的方法 ? 构造函数里面直接初始化Init(),这样在在Form_Load里面就会加载到控件中显示了 ?...插件三里面除了实现的接口类,又增加了一个窗体Form1 然后我们在MyPlugin3里面写入接口的实现方法 ? 可以看到Do里面是直接显示Form1 Form1里面增加了一个Button ? ?
您可能不时会发现自己在撰写工厂方法或在构造函数或所需初始化方法内创建依赖对象,但借助 MEF 之类的框架,大部分此类工作不再是必需的了。...通过在我们的部署中将 MEF 与 StorageClient API 结合在一起使用,我们不必重新利用或重新部署我们的 Web 角色,便可以部署和提供新类。...我们不要在这里偏离这个目标 — 我们的所有具体类实现都具有追溯到某一接口类型的继承。...这并不意味着每个类都将直接继承自某个接口,但类通常将具有抽象层,这些抽象层遵从“接口 “ 虚拟 “ 具体”之类的模式。...使用 MEF 之类的框架有许多原因,但这有点超出了我们在本文中重点介绍的功能。
本文主要把MEF作为一种IOC容器进行讲解,.net中可用的IOC容器非常多,如 CastleWindsor,Unity,Autofac,ObjectBuilder,StructureMap,Spring.Net...等,这些第三方工具各不相同,但功能大体都相同,大都需要事先对接口与实现进行配对(通过代码或配置文件),然后由系统自动或手动来通过接口来获得相应实现类的实例,对象实例化的工作由IOC容器自动完成。...概述 官方说法: Managed Extensibility Framework(MEF)是.NET平台下的一个扩展性管理框架,它是一系列特性的集合,包括依赖注入(DI)等。...MEF还提供了一些用来定位和加载可用扩展的方法。MEF允许使用附加元数据对扩展进行标记,从而达到易于丰富的查询和筛选的目的。 工作原理 ?...在特性化编程模型中,导入和导出是由修饰类或成员使用 Import 和Export 特性声明的。 Export 特性可修饰类、字段、属性或方法,而 Import 特性可修饰字段、属性或构造函数参数。
前言 Managed Extensibility Framework(MEF)是.NET平台下的一个扩展性管理框架,它是一系列特性的集合,包括依赖注入(DI)等。...MEF方式 MEF 提供一种通过“组合”隐式发现组件的方法。 MEF 组件(称为“部件-Part”)。...部件以声明方式同时指定其依赖项(称为“导入-Import”)及其提供的功能(称为“导出-Export”)。 MEF原理上很简单,找出有共同接口的导入、导出。然后找到把导出的实例化,赋给导入。...说到底MEF就是找到合适的类实例化,把它交给导入。 使用 MEF 编写的可扩展应用程序会声明一个可由扩展组件填充的导入,而且还可能会声明导出,以便向扩展公开应用程序服务。 ...在特性化编程模型中,导入和导出是由修饰类或成员使用 Import 和Export 特性声明的。 Export 特性可修饰类、字段、属性或方法,而 Import 特性可修饰字段、属性或构造函数参数。
,微软称之为 MEF2,但因为接口兼容,也直接称之为 MEF .NET 开发团队觉得 MEF 第一代性能太差,于是通过 NuGet 为移动设备发布了可移植类库,是个轻量级版本,只移植了 .NET Framework...它的接口相比于 .NET Framework 中原生带的已经变了,中文和英文的参考资料很少,几乎都是参考微软官方发布的文档才能使用。所以本文将为大家提供其中文的使用方法指导。...比较难的是框架代码,给开发团队中写框架的那一部分成员。 业务代码 业务代码的写法其实取决于框架开发者怎么去定义框架。但是,为了方便大家理解,在这一节我将只说 MEF2 最原生的使用方法。...框架那一节我才会说明如何自定义业务代码的写法。 最原生的使用方法其实只有两个——[Import] 和 [Export],其它都是变种!...具体说来,标记了 Export 的类将导出给其它类使用;标记了 Import 的属性/字段/方法参数等将接收来自 Export 的那些类/属性/字段的实例。
这种公开扩展点和定义插件的方法使用所谓的特性化编程模型,开发人员可以使用特性修饰属性、类甚至方法,以通告需要具有特定类型的依赖关系或能够满足特定类型的依赖关系。...一个部分指定要处理的一个类或一组类;另一部分指定要应用于选定的类、这些类的属性或这些类的构造函数的特性、元数据和共享策略。...此处添加的代码段是接受 Func 的方法 SelectConstructor。这为我提供了一种指定构造函数的方法。...您可以指定一个约定,例如,具有最小或最大参数个数的构造函数始终为 ImportingConstructor。...在我的示例中,由于只有一个构造函数,因此,我可以使用选择第一个也是唯一一个构造函数的简单案例。
02 创建Mef接口类 1.创建WebMef.Core的类库 也是新建一个.net5的类库,这个类库里用来写Mef插件的接口 2.添加Mef2的Nuget包 在Nuget包中添加Microsoft.Composition...这个组件即为MEF2的组件。 3.创建IMSG接口 创建一个IMsg的接口,里面定义了两个属性和三个函数方法。...创建Plugin1和Plugin2的两个插件类 然后在右键添加引用中加入刚才创建的WebMef.Core的类库 两个插件的类继承自IMsg,然后写实现方法。...,要注意的点就是要在类的前面加上[Export(typeof(IMsg))] 04 创建Mef的注册类 上面几步已经把简单的接口及实现方法都写完了,接下来要在WebMef.Core的类库中创建一个MefRegister...新建一个MefConntrol的类,加入一个Get方法,根据输入的name的名称查找出对应的MEF插件,然后直接调用接口实现的Send方法即可。
后被Martin Fowler改名为 Dependency Injection 依赖注射,也就是将类之间的关系通过第三方进行注射,不需要类自己去解决调用关系。 ...IOC模式大致有三种: 第一种:接口注入的方式 第二种:构造函数注入的方式 第三种:属性注入的方式。...选择MEF方式 .net中可用的IOC容器非常多,如 CastleWindsor,Unity,Autofac,ObjectBuilder,StructureMap,Spring.Net等,这些第三方工具各不相同...,但功能大体都相同,大都需要事先对接口与实现进行配对(通过代码或配置文件),然后由系统自动或手动来通过接口来获得相应实现类的实例,对象实例化的工作由IOC容器自动完成。 ...MEF是不需要使用配置文件或代码对接口与实现进行一一配对的,只需要简单的使用几个Attribute特性,就能自动完成源与目标的配对工作 3.自动化:系统初始化时自动遍历程序目录或指定文件夹下的dll,根据程序集中接口与类的特定
而MEF、Unity、MAF(包括Prism框架部分)、Ninject、StructureMap、Autofac等,都是IoC思想的具体实现。...IoC中的概念 (1)依赖(Dependency):表示有关联,一个类依赖于另一个类。在日常编码的时候大家追求的都是高内聚低耦合这种就是良性的依赖。...将标记了Export的特性的dll注册到IoC容器中。 (5)IoC容器: 依赖注入的框架,用来映射依赖,管理对象的创建和生存周期。...特性类通常用Attribute结尾,在使用的时候可以用全称,也可以去掉这个结尾,也可以加上小括号显示调用构造函数,如果不加小括号默认调用无参构造函数,也可以在括号内直接给属性或字段赋值。...使用场景:为类或成员添加描述信息,然后在使用的时候拿到该信息 (7)MEF提供三种方式发现部件 AssemblyCatalog 在当前程序集发现部件。
大家好,又见面了,我是你们的朋友全栈君。 在程序中使用框架必然要有一个切入点,框架会在这里进行初始化,处理相关配置信息等。...当然如果你不喜欢这两个容器或者已有的程序使用了其它容器(如Spring.Net, Castle等),也可以通过继承Boostrapper抽象基类来实现自己的SpringBootstrapper和CastleBootstrapper...注册框架异常类型 Prism提供了ExceptionExtensions类来帮助开发人员定位异常发生的根异常。...默认情况下这是个空方法,可以通过重写这个方法加入自定义的逻辑,可以在这个方法中将Shell作为Silverlight程序的根容器页面显示出来。...所以不管使用什么样的容器,都需要提供一个实现了IServiceLocator接口的适配器,如使用Unity要提供UnityServiceLocatorAdapter,使用Mef要提供MefServiceLocatorAdapter
方法一 构造函数注入 构造函数函数注入,毫无疑问通过构造函数传递依赖。因此,构造函数的参数必然用来接收一个依赖对象。那么参数的类型是什么呢?具体依赖对象的类型?还是一个抽象类型?...那么构造函数的参数应该是一个抽象类型。我们再回到上面那个问题,如何将SqlServerDal对象的引用传递给Order类使用呢?...方法三 接口注入 相比构造函数注入和属性注入,接口注入显得有些复杂,使用也不常见。具体思路是先定义一个接口,包含一个设置依赖的方法。然后依赖类,继承并实现这个接口。...LightInject: http://www.lightinject.net/ (推荐使用Chrome浏览器访问) 以Ninject为例,我们同样来实现 [方法一 构造函数注入] 的功能。...DI是IoC的具体实现方式之一,使用最为广泛。IoC容器是DI构造函注入的框架,它管理着依赖项的生命周期以及映射关系。
Prism提供了一个抽象基类Bootstrapper,这个类里面包含了许多空的虚方法,可以重写他们添加自己的逻辑。...当然如果你不喜欢这两个容器或者已有的程序使用了其他容器(如Spring.Net,Castle等),也可以通过继承Bootstrapper抽象类来实现自己的SpringBootstrapper和CastleBootstrapper...注册框架异常类型 Pism提供了ExceptionExtensions类来帮助开发人员定位异常发生的跟异常。...默认情况下这是个空方法,可以通过重写这个方法加入自定义的逻辑,可以在这个方法中将Shell作为Silverlight程序的根容器页面显示出来。...所以不管使用什么样的容器,都需要提供一个实现了IServiceLocator接口的适配器,如果使用Unity要提供UnityServiceLocator,使用Mef就要提供MefServiceLocator
用了几天时间看了一下开源框架Caliburn.Micro 这是他源码的地址http://caliburnmicro.codeplex.com/ 文档也写的很详细,自己在看它的文档和代码时写了一些demo...和笔记,还有它实现的原理记录一下 学习Caliburn.Micro要有MEF和MVVM的基础 先说一下他的命名规则和引导类 以后我会把Caliburn.Micro的 Actions IResult,IHandle...一般我用我MEF做为容器,重写这个类的三个方法,写法也比较固定,就像上边我写的那这样 如果有自己的一些东西需要配置可以写在Config里 除了上边的三个方法还有OnStartup和OnExit分别是程序进入和退出的执行事件...匹配好View和ViewModel后 去查找View里的元素名称和viewModel里的方法或属性是否有一至的如果有一至的就绑定 !...接口 这是一个专门用来打开窗体的类 它可以以Show() ShowDialog还有ShowPopup形式打开窗体 今天就先说到这,下次会写一下Caliburn的Actions Demo下载:BootstrapperAndConventions.rar
01 — 前言 MEF是微软自家的托管可扩展框架,在这里我把它用成了ioc容器。...利用这一特点,在多人合作项目开发中,一个解决方法就可以拆分成很多个项目,只用在主项目中搭建框架,每个分支项目开发好以后加载到容器中,就可以实现界面和逻辑的调用,可能这样解释有点生涩,具体我们看下面实例再去理解...02 — 新建项目MefTest 第一步 :在我们的解决方法下添加新的项目MefTest(类库) 第二步:MefTest下添加MefTestView.xaml和MefTestViewModel.cs... viewmodel中: 定义 MefTestViewModel public MefTestViewModel MefTestView { get;set;} 然后在主程序的构造函数中通过...这样如果我们定义了公共的接口,直接导出接口类型,就很好地实现了主项目和子项目的解耦。
前言 在http://www.cnblogs.com/aehyok/p/3386650.html前面一节主要是对MEF进行简单的介绍。本节主要来介绍如何在Asp.Net Mvc3.0中使用MEF。...准备工作 首先建立一个Asp.Net Mvc3.0的Web项目。然后建立一个业务逻辑处理的类库项目。 ?...在MEF.Repository类库项目中建立一个ITestRepository的接口 namespace MEF.Repository { public interface ITestRepository...,它的类型为上面声明的接口ITestRepository。...方法执行的文件,里面有一个自定义的MefDependencySolver public class MefDependencySolver : IDependencyResolver {
Unity和MEF,这里我分别采用MEF和unity去做,不懂MEF的建议看看这位大牛的系列博文http://www.cnblogs.com/yunfeifei/p/3922668.html 02安装库...,需要继承基类Prism.Mef库下的基类MefBootstrapper 方式1 采用mef public class MyBootstrapper : MefBootstrapper {...()方法后才将HelloWorldView显示出来。...中将类标注为 [Export] step4:新建类库PrismModuleLeft 类库中新建ModuleLeftView.xaml 关于事件绑定:(在下面代码中两种方式都列出来了) ①控件继承自ButtonBase...,数据,模型组成的集合; Prism是个非常强大的wpf mvvm模式框架,它使用依赖注入,控制反转容器来帮助我们解决团队合作的松耦合问题。
MEF(Managed Extensibility Framework)是.NET Framework 4.0一个重要的库,Visual Studio 2010 Code Editor的扩展支持也是基于...MEF构建的。...MEF组合过程 1.创建组件目录(如AssemblyCatalog) 2.创建组合容器CompositionContainer 3.创建一个组件 4.从组件容器获取其它组件功能定义,执行匹配组合 var...T_JSSDD_DDZB_XM_R_SXRepository(), new T_JSSDD_DDZB_SXPZVALUERepository() ); 直接传入接口和类进行映射和其他...贴点简单事例代码吧,看下用法,具体的机制大家慢慢研究吧,MEF基于net framework 4.0,不用引入第三方类库,使用也是挺方便的: /// /// 导出特性
索引 【翻译】WPF应用程序模块化开发快速入门(使用Prism框架)【上】 【翻译】WPF应用程序模块化开发快速入门(使用Prism+MEF)【中】 系统启动 系统使用Bootstrapper类型来启动程序...})] public class ModuleA : IModule 当使用MEF框架的时候 ModuleExport特性允许MEF发现适当的、 继承自IModule接口的类型。...CreateModuleCatalog和ConfigureModuleCatalog方法 这样就可以通过配置文件来注册模块 使用MEF时 AggregateCatalog支持发现模块和类型 基于此,...QuickStartBootstrapper重写ConfigureAggregateCatalog 模版方法并使用MEF注册程序集 仍然使用ModuleCatalog加载配置文件来注册模块...也有按需加载模块的业务 还有显示进度、控制模块间的依赖性等业务 注意: 此快速入门示例还有一些额外的类 以帮助追踪模块初始化的状态信息 这些类主要是起了示范的目的 Shell的用户界面里包含了六个ModuleControl
领取专属 10元无门槛券
手把手带您无忧上云