随笔分类 -  MEF

摘要:MEF生命周期MEF生命周期分为三种:ANY:MEF根据自己的需要设置是否共享Shared:共享部件,可以在多个MEF组合容器中使用NoShared:不共享部件,每次使用都需要创建实例在MEF的实现通过PartCreationPolicyAttribute特性实现对部件的生命周期配置。使用举例:///导出using System.ComponentModel.Composition;namespa... 阅读全文
posted @ 2010-11-12 09:40 星空有我 阅读(918) 评论(0) 推荐(0)
摘要:Composition Batch(组合批处理)该类的实例可以批量的添加移除组件实例var batch = new CompositionBatch();batch.AddPart(partInstance1);batch.AddPart(partInstance2);batch.RemovePart(part3);container.Compose(batch); 阅读全文
posted @ 2010-11-10 22:57 星空有我 阅读(324) 评论(0) 推荐(0)
摘要:查询组合容器当查询一个简单实例时返回null或者一个以上时会出异常。GetExportedValue();var container = new CompositionContainer(new AssemblyCatalog(typeof(Program).Assembly));Root partInstance = container.GetExportedValue<Root>(... 阅读全文
posted @ 2010-11-10 22:18 星空有我 阅读(512) 评论(0) 推荐(0)
摘要:AddPart/RemovePartusing System;using System.ComponentModel.Composition;using System.ComponentModel.Composition.Hosting;using System.ComponentModel.Composition.Primitives;class Program{ static void Mai... 阅读全文
posted @ 2010-11-10 22:09 星空有我 阅读(540) 评论(0) 推荐(0)
摘要:MEF目录MEF编程的最大价值就是能够动态发现目录内的组合部件,应用程序可以通过目录对部件注册导出。Assembly Catalog 程序集目录var catalog = new AssemblyCatalog(System.Reflection.Assembly.GetExecutingAssembly());Directory Catalog 目录(silverlight不提供该类)var c... 阅读全文
posted @ 2010-11-10 21:14 星空有我 阅读(836) 评论(0) 推荐(0)
摘要:导出元数据在部件导出的时候需要导出相关联的数据,可以用ExportMetadata来导出元数据。简单的元数据导出实例,参考http://mef.codeplex.com/using System;using System.ComponentModel.Composition;using System.ComponentModel.Composition.Hosting;namespace Meta... 阅读全文
posted @ 2010-11-10 20:58 星空有我 阅读(526) 评论(0) 推荐(0)
摘要:懒加载懒加载的设计原因:在一个部件组合的时候,要触发显示一个或者多个部件的需求导入的部分实例,有些程序需要延迟部件实例化,一个重要原因是创建一个长期复杂的部件要耗费昂贵的时间或者是不必要的。[Export]public class HttpServerHealthMonitor{ [Import] public Lazy<IMessageSender> Sender { get; se... 阅读全文
posted @ 2010-11-10 12:54 星空有我 阅读(363) 评论(0) 推荐(0)
摘要:声明导出以下内容是从http://mef.codeplex.com/提取而来MEF的导出是通过Export属性来标示的,可以导出部件、属性、方法字段。部件导出:[Export]public class SomeComposablePart { ...}属性导出原因:1、可以导出CLR的最终类型,或者第三方类型2、创建耦合导出3、可以导出相关系列的默认部件 public class Configur... 阅读全文
posted @ 2010-11-10 11:50 星空有我 阅读(399) 评论(0) 推荐(0)
摘要:声明导入以下内容从http://mef.codeplex.com/摘抄而来属性导入用Import标示部件作为属性导入class Program { [Import] public IMessageSender MessageSender { get; set; } }构造器参数导入通过将部件作为构造参数来实现导入使用方法:1、添加ImportingConstructor属性2、为导入添加构造参数c... 阅读全文
posted @ 2010-11-10 00:12 星空有我 阅读(488) 评论(0) 推荐(0)
摘要:组合部件是MEF的组合单元,一个组合部件可以为其他部件提供导出服务,也可以导入其他部件的服务,一个部件至少包含一个导出。在MEF中通过Export和Import特性来标示导出和导入,部件可以直接添加到组合容器,也可以通过目录添加到组合容器,默认的目录是通过Export来标示的。部件之间没有依赖关系,但是部件都依赖于契约。默认情况下应使用类型契约而不是字符串契约,字符串契约容易导致模糊。如果必须使用... 阅读全文
posted @ 2010-11-09 23:36 星空有我 阅读(765) 评论(2) 推荐(0)
摘要:在应用程序中宿主MEFManaged Extensibility Framework(MEF)是.NET平台下的一个扩展性管理框架,他的特点如下:  1、.net下的一个可扩展行管理框架,包括了依赖注入和Duck Typing。  2、轻松应对应用程序扩展并且对已有代码产生最小影响。  3、应用程序和扩展程序之间不产生直接依赖,多个同样需求共享扩展程序。参照http://mef.codeplex.... 阅读全文
posted @ 2010-11-09 22:47 星空有我 阅读(655) 评论(0) 推荐(0)