码迷,mamicode.com
首页 > 其他好文 > 详细

MEF

时间:2014-09-10 22:16:01      阅读:347      评论:0      收藏:0      [点我收藏+]

标签:style   blog   http   color   io   os   使用   ar   2014   

  1. 基本概念:
    • Managed Extensibility Framework 或 MEF 是一个用于创建可扩展的轻型应用程序的库,在.NET 4.0发布
    • Container:容器,使用CompositionContainer类表示,存放目录(Catalog)并进行管理,如导入,导出
    • Catalog:目录,存放部件的地方,当需要某个部件时会在目录中寻找,可以作为目录的有type,assembly,directory
    • Part:部件,即实现契约的类
    • Import:导入,使用ImportAttribute进行修饰,可将某个对象声明为Import,可以修饰field,property,parameter等。每个导入都有一个契约,用于匹配对应的导出
    • Export:导出,导出契约的实现,对应一个Import
    • Contract:契约,一种约定,代码中表现为接口或者抽象类
  2. 示意图:
    bubuko.com,布布扣
  3. 示例代码:
    //这便是我们的契约 Contract
    public 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

标签:style   blog   http   color   io   os   使用   ar   2014   

原文地址:http://www.cnblogs.com/phenixyu/p/3965230.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!