在"MEF(Managed Extensibility Framework)使用全部扩展组件"中,客户端应用程序调用了所有的扩展组件,而且如果有新的扩展组件加入,必须先关闭程序,再重新启动才可以调用所有组件. 本篇体验使用MEF的ExportMetadata特性,有选择性地使用某些扩展组件,使用Lazy<>,让客户端程序延迟动态加载组件,即使不关闭应用程序,也能调用所有组件.   ● StudentMEF.Lib, 类库,包含接口IStudent.cs ● StudentM…
MEF(Managed Extensibility Framework),所在命名空间是System.ComponentModel.Composition.dll.简单来说,MEF是将符合约定(一般是实现接口)的组件的Parts(类.方法和属性可看作是Part)标记为Export特性,再把这些组件放到与可执行程序同目录的Extensions文件夹中,最后通过把Part标记为Import来引用这些组件,从而为我们创建可扩展组件提供了方便. 以球员踢球为例,体验MEF的工作原理和便捷之处. ● He…
体验Managed Extensibility Framework精妙的设计   MEF(Managed Extensibility Framework)是.NET Framework 4.0一个重要的库,Visual Studio 2010 Code Editor的扩展支持也是基于MEF构建的.MEF的目标是简化创建可扩展的应用程序,其核心类是ComposablePart,即具有组合能力的组件,每一个称为ComposablePart(中文可为可组合构件,不过下文一直采用英文来表示,这样比较贴切…
MSDN官方资料,并且微软还提供了SimpleCalculator sample学习样例 http://msdn.microsoft.com/en-us/library/dd460648(v=vs.110).aspx https://mef.codeplex.com/ 博友文章 http://www.cnblogs.com/Mainz/archive/2011/04/27/2030701.html   Ten Reasons to use the Managed Extensibility Fr…
1.什么是MEF MEF是一个来自于微软协作构建扩展应用的新框架,它的目的是在运行中的应用中添加插件.MEF继承于.NET 4.0 Framework平台,存在于各种应用平台的系统程序集中 2.程序集 System.ComponentModel.Composition.dll 3.关键结构 Import Export Compose 4.相关知识 Part:一个对象,能导入或者导出与应用程序 Catalog:一个对象,帮助在程序集或者文件夹中查找有效的构建部件 Contract:导入和导出部分需…
概述 Managed Extensibility Framework(MEF)是.NET平台下的一个扩展性管理框架,它是一系列特性的集合,包括依赖注入(DI)以及Duck Typing等.MEF为开发人员提供了一个工具,让我们可以轻松的对应用程序进行扩展并且对已有的代码产生最小的影响,开发人员在开发过程中根据功能要求定义一些扩展点,之后扩展人员就可以使用这些扩展点与应用程序交互:同时MEF让应用程序与扩展程序之间不产生直接的依赖,这样也允许在多个具有同样的扩展需求之间共享扩展程序. 本文将介绍一…
Managed Extensibility Framework(MEF)是微软的一个用来扩展.NET应用程序的框架,它最初为了满足Visual Studio里的编辑器的需求,比如说,延迟加载所有东西和细粒度协定.随着托管代码慢慢地取代基于COM的扩展模型,MEF框架也逐渐成型. MEF是在Codeplex上开源的,并且现在已经是.Net 4.0的一部分.我们可以用它非常容易的实现插件框架.一个简单的示例如下(使用时需要添加System.ComponentModel.Composition.dll…
MEF(Managed Extensibility Framework)是.NET Framework 4.0一个重要的库,Visual Studio 2010 Code Editor的扩展支持也是基于MEF构建的.MEF的目标是简化创建可扩展的应用程序,其核心类是ComposablePart,即具有组合能力的组 件,每一个称为ComposablePart(中文可为可组合构件,不过下文一直采用英文来表示,这样比较贴切)的组件可以组合(称为Import)其它 组件的功能(其它组件通过声明Expor…
在过去,我们完成一套应用程序后,如果后面对其功能进行了扩展或修整,往往需要重新编译代码生成新的应用程序,然后再覆盖原来的程序.这样的扩展方式对于较小的或者不经常扩展和更新的应用程序来说是可以接受的,而对于像ERP系统那样复杂而且常常需要扩展的应用程序,这种扩展方法就不够方便,因为每次都要修改源代码或重新引用组件. 尤其是组件(许多dll),如果每编写一个新组件又要在主项目中引用一次,显然主项目就不得不经常重新生成.要是能有一种机制,可以在主项目应用程序不作任何修改就可以自动识别并扩展组件,就会很…
我们都知道ExtJs有日期组件DateField,但直到ExtJs 5.0版本该日期组件也只能选择日期,不能选择时间(具体到时.分.秒),而实际工作中又常常会有需要日期和时间同时选择的需求,我们只能自己扩展了,网上也有一些扩展好的现成组件,要么是早期版本的,ExtJs5.0版本的无法用,要么就是测试不充分,代码拿过来也用不了.于是笔者就只能自己动手了.先来看一下完成后的效果图: 先说一下思路: 我们需要如上图这样的组件,首先我们得有一个能够设置时.分.秒的组件,我们取名TimePickerFie…
系列目录     [已更新最新开发文章,点击查看详细] 有两种支持的 .NET 实现可用于生成服务器端应用: .NET Framework .NET Core/5+,包括 .NET Core..NET 5 及更高版本. 这两者共用许多相同的组件,你可在它们之间共享代码. 但两者之间存在根本的差异,可根据需要实现的目标进行选择. 本文介绍了在何种情况下进行选择. 在以下情况,对服务器应用程序使用 .NET Core/5+: 用户有跨平台需求. 你正在以微服务为目标. 你正在使用 Docker 容器…
entityTypeBuilder .HasOne<GeraeteArt>() .WithMany(p => p.Geraete) .HasForeignKey(b => b.GeraeteArtId) .OnDelete(Microsoft.Data.Entity.Metadata.DeleteBehavior.SetNull); HasOne选择外键所在的表,withMany为设置表为1对多的关系,HasForeignKey是表里面的外键,OnDelete是外键删掉之后的处理…
相信很多微信用户在使用微信给朋友,同事发送相册中的文件时,微信会显示你手机中的视频文件,这样很不方便. 如果要完全不显示视频文件: 随便在手机中建立一个文件夹,名字叫 ".nomedia",把视频文件丢进去就行了. 如何隐藏你希望隐藏的视频文件: 随便在手机中建立一个文件夹,名字叫 ".nomedia",把视频文件丢进去就行了. 没丢进去的就是会显示的视频文件. 那么问题来了:如何把这些隐藏在".nomedia"文件夹中的视频显示出来? 手机--…
题目大意: https://www.luogu.org/problemnew/show/P1280 题解 手推一遍思路更清晰 #include <bits/stdc++.h> using namespace std; ]; bool cmp(NODE& a,NODE& b) { return a.x>b.x; } ],dp[]; /// sum[i]记录在i时间开始的事情的个数 /// dp[i]记录从i到末尾最多的空闲时间 int main() { int n,k; s…
4.1创建测试库 Robot Framework的实际测试功能由测试库提供.有许多现有的库,其中一些甚至与核心框架捆绑在一起,但仍然经常需要创建新的库.这个任务并不复杂,因为正如本章所示,Robot Framework的库API简单明了. 4.1.1简介 支持的编程语言 不同的测试库API 4.1.2创建测试库类或模块 测试库名称 为测试库提供参数 测试库范围 指定库版本 4.1.3创建静态关键字 哪些方法被视为关键字 关键字名称 关键字参数 关键字的默认值 可变数量的参数 参数类型 4.1.4…
首先在这里庆祝香港回归祖国的怀抱25周年,想起那年还是一个小学生戴着红领巾和胸章激动不已,实现祖国的统一是每个中华儿女从小的梦想!趁着这欢庆的日子,突然想要写些什么,其实最近也在做一些事,由于工作繁忙加上自身的懒惰,因此对于自己所维护的这个框架感觉有些疏远.但我还是没有忘记8年前,当初实现这个框架的激情和梦想,在这里我用一个具体的例子来看看PF框架到底能做些什么. 例子 这次的选择是以一个实际运营的项目做测试,其实我在以前的文章中也提到过这个应用,也许大家都并不陌生,它就是现在还比较火爆的剑侠3…
背景 前段时间项目重构,改成SSR的项目,但之前用的图片选择上传组件不支持SSR(server-side-render).遂进行了调研,发现很多的工具.但有的太大,有的使用麻烦,有的不满足使用需求.决定自己写一个h5移动端图片上传组件.图片上传是一个比较普遍的需求,PC端还好,移动端就不是特别好做了.下面将过程中一些重点的问题进行简单的记录. 重点 1.关于input 选择功能使用<input>标签实现.属性accept='image/*',:capture表示,可以捕获到系统默认的设备,比如…
4.3使用监听器接口 Robot Framework有一个侦听器接口,可用于接收有关测试执行的通知.监听器是具有某些特殊方法的类或模块,它们可以用Python和Java实现.监听器接口的示例用法包括外部测试监视器,在测试失败时发送邮件消息以及与其他系统通信. 4.3.1使用听众 使用--listener 选项从命令行使用监听器,以便将监听器的名称作为参数提供给它.侦听器名称来自实现侦听器接口的类或模块的名称,类似于从实现它们的类获取测试库名称.指定的侦听器必须位于导入导入时搜索测试库的同一模块搜…
4.2远程库接口 远程库接口提供了在运行Robot Framework本身的机器上运行测试库的方法,以及使用除本机支持的Python和Java之外的其他语言实现库的方法.对于测试库,用户远程库看起来与任何其他测试库几乎相同,使用远程库接口开发测试库也非常接近于创建普通测试库. 4.2.1简介 使用远程库API有两个主要原因: 与运行Robot Framework的机器不同,可以在不同的机器上安装实际库.这为分布式测试提供了有趣的可能性 可以使用支持XML-RPC协议的任何语言来实现测试库 .Ro…
E文好的可以直接看https://github.com/loresoft/EntityFramework.Extended 也可以在nuget上直接安装这个包 1.先更新VS的NuGet版本http://docs.nuget.org/docs/start-here/installing-nuget 2.修改默认地址: Options => Package Manager => Generalhttp://go.microsoft.com/fwlink/?LinkID=206669 3.安装包…
E文好的可以直接看https://github.com/loresoft/EntityFramework.Extended 也可以在nuget上直接安装这个包,它的说明有点过时了,最新版本已经改用对IQueryable<T>的扩展,而不是DbSet<T>(已经标记为弃用),所以跟我一样有隔离癖好的就可以大胆使用了.下面介绍如何批量删除.更新.查询. 批量删除 //EF原生的删除需要先取出entity然后remove context.Remove(context.Users.Firs…
大家知道, 对于HTML控件select, 是没有readOnly属性的,所以设置它并不起作用,如: 如果用disabled的话,提交时又取不到值. 那有什么方法可以实现?可以有一个折中的方法,如下: <select id="select1" onchange="this.selectedIndex=this.defOpt;"> <option value="aa">aa</option> <option…
转摘 https://www.cnblogs.com/niceWk/archive/2010/07/23/1783394.html 借花献佛 前面我们介绍了构成DynamicAspect绝大部分的类,为了让Aspect能够自动实施到目标对象,需要提供一种动态装载Aspect机制,在设计DynamicAspect的最初版本,笔者使用配置文件,通过在配置文件提供一个自定义的DynamicAspect节,然后在那里用XML元素来描述每个Aspect的类型以及要编织的目标类型,程序在运行过程中,通过配置…
一.   什么是MEF MEF(Managed Extensibility Framework)是一个用于创建可扩展的轻型应用程序的库. 应用程序开发人员可利用该库发现并使用扩展,而无需进行配置. 扩展开发人员还可以利用该库轻松地封装代码,避免生成脆弱的硬依赖项. 通过 MEF,不仅可以在应用程序内重用扩展,还可以在应用程序之间重用扩展.(摘自MSDN) 我的理解:应用/插件均使用约定好的协议(接口)进行开发.系统将自动扫描指定文件夹,并按协议自动导入. 二.   MEF简单例子 1.例子一 a…
最近在写一篇关于如何扩展 Visual Studio 编辑器的文章时,用到了 MEF,因此打算写一篇文章提一下这个技术点.本篇文章并不打算详细介绍 MEF,只是一个最简单的入门,相信您在阅读本篇文章后,可以迅速开发出一个可扩展的应用程序. 简 介 MEF(Managed Extensibility Framework),是微软推出的一款用于搭建可扩展应用程序的框架,起初是独立于 .Net 发布的,后来集成到了 .Net 4.0 中.使用该框架可以非常轻松地扩展一个已发布的应用程序的功能,连 Vi…
转自:http://www.cnblogs.com/ulex/p/4186881.html IOC容器:工具较多,大体功能都相同,大都需要事先对接口与实现进行配对(通过代码或配置文件),然后由系统自动或手动通过接口来获得相应实现类的实例,对象实例化的工作由IOC容器自动完成. 概述:MEF :Managed Extensibility Framework(MEF)是.NET平台下的一个扩展性管理框架,他是一系列特性的集合,包括依赖注入等. 解决的问题: 1.MEF为宿主应用提供了一种标准的途径来…
前言:最近去了趟外地出差,介绍推广小组开发的框架类产品.推广对象是本部门在项目上面的同事——1到2年工作经验的初级程序员.在给他们介绍框架时发现很多框架设计层面的知识他们都没有接触过,甚至没听说过,这下囧了~~于是乎在想该如何跟他们解释MEF.AOP.仓储模式等方面的东东.本来 C#基础系列 应该还有两篇关于异步的没有写完,奈何现在要推广这些个东西,博主打算先介绍下项目中目前用到的些技术,异步的往后有时间再做分享.C#进阶系列主要围绕MEF.AOP.仓储模式.Automapper.WCF等展开.…
MEF(Managed Extensibility Framework)是.NET Framework 4.0一个重要的库,Visual Studio 2010 Code Editor的扩展支持也是基于MEF构建的. MEF组合过程 1.创建组件目录(如AssemblyCatalog) 2.创建组合容器CompositionContainer 3.创建一个组件 4.从组件容器获取其它组件功能定义,执行匹配组合 var catalog = new AssemblyCatalog(Assembly.…
前言 小编菜鸟级别的程序员最近感慨颇多,经历了三五春秋深知程序路途遥远而我沧海一粟看不到的尽头到不了的终点何处是我停留的驿站.说了段废话下面进入正题吧! 什么是MEF? MEF:全称Managed Extensibility Framework(托管可扩展框架).单从名字我们不难发现MEF是专门致力于解决扩展性问题的框架. MSDN:MEF(Managed Extensibility Framework)是一个用于创建可扩展的轻型应用程序的库. 应用程序开发人员可利用该库发现并使用扩展,而无需进…
1.什么是MEF 先来看msdn上面的解释:MEF(Managed Extensibility Framework)是一个用于创建可扩展的轻型应用程序的库. 应用程序开发人员可利用该库发现并使用扩展,而无需进行配置. 扩展开发人员还可以利用该库轻松地封装代码,避免生成脆弱的硬依赖项. 通过 MEF,不仅可以在应用程序内重用扩展,还可以在应用程序之间重用扩展. 也有人把MEF解释为“依赖注入”的一种方式,那么什么是“依赖注入”?如果这样解释,感觉越陷越深......根据博主的理解,了解MEF只需要…