首页 > 代码库 > MEF
MEF
- 基本概念:
- Managed Extensibility Framework 或 MEF 是一个用于创建可扩展的轻型应用程序的库,在.NET 4.0发布
- Container:容器,使用CompositionContainer类表示,存放目录(Catalog)并进行管理,如导入,导出
- Catalog:目录,存放部件的地方,当需要某个部件时会在目录中寻找,可以作为目录的有type,assembly,directory
- Part:部件,即实现契约的类
- Import:导入,使用ImportAttribute进行修饰,可将某个对象声明为Import,可以修饰field,property,parameter等。每个导入都有一个契约,用于匹配对应的导出
- Export:导出,导出契约的实现,对应一个Import
- Contract:契约,一种约定,代码中表现为接口或者抽象类
- 示意图:
- 示例代码:
//这便是我们的契约 Contractpublic interface ICalculator { int Add(int a, int b); int Sub(int a, int b);}//此处我们导出了契约,这就是一个部件 [Export(typeof(ICalculator))] public class MyCalculator : ICalculator { public int Add(int a, int b) { Console.WriteLine("Add Invoked"); return a + b; } public int Sub(int a, int b) { Console.WriteLine("Sub Invoked"); return a - b; } }//此处我们导出了契约,这就是一个部件 [Export(typeof(ICalculator))] public class MyCalculator : ICalculator { public int Add(int a, int b) { Console.WriteLine("Add Invoked"); return a + b; } public int Sub(int a, int b) { Console.WriteLine("Sub Invoked"); return a - b; } } class Program { private static CompositionContainer _container; static void Main(string[] args) { //AssemblyCatalog 目录的一种,表示在相应的程序集中搜索 var catalog = new AssemblyCatalog(typeof(Program).Assembly); _container = new CompositionContainer(catalog); MathCompute mathCompute = new MathCompute(); _container.ComposeParts(mathCompute);//组装部件 Console.WriteLine(mathCompute.Add(1, 3)); Console.WriteLine(mathCompute.Sub(3, 2)); Console.ReadLine(); }}
MEF
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。