zoukankan      html  css  js  c++  java
  • 基本概念

    其实个人觉得MEF和WCF有点类似吧,都是要通过一个接口实现的形式来达到传递信息并且使用的目的

    以下是个人从网络上一些高手学习来使用的一些经验吧,或者是学习的心得吧

    一、基本概念

    • MEF:Managed Extensibility Framework,.NET 4.0中带来的一个基于托管的扩展程序开发框架(挺拗口的,不过只是概念),另外通过强大的百度百科,我们发现MEF还是“小鼠胚胎成纤维细胞”的简称(这货是?)。
    • Contract:契约,即一种约定,具体在代码中表现为接口和抽象类。自从进入.NET 4.0,契约这个单词我们应该不会陌生,WCF中贯穿着各种契约,无论如何,契约就是一种约定。
    • Import:导入,导入契约的实现,说明此处需要一个实现的契约。
    • Export:导出,导出契约的实现,说明相应的类中实现了相应的契约。
    • Part:部件,即实现契约的类。
    • Catalog:目录(我是这样定义的),存放部件的地方,当需要某个部件时,会在目录中寻找。
    • Container:容器,存放目录并进行部件管理,如导出、导入等。
    • Compose:组装,通过容器在目录中寻找到实现了相应契约的部件,进行部件的组装。

    高手做了一章图

    绘图1

    其实就是把部件从catlog中为了实现导出来,先从容器里面读取出来,然后导入到Compsoe里面进行组装最后实现实例化

    使用先添加对MEF库的引用,即“System.ComponentModel.Composition”。

    三、基本使用示例

    1、添加一个契约

    //这便是我们的契约 Contract,其实说白了就是接口
    public interface ICalculator {
    
        int Add(int a, int b);
    
        int Sub(int a, int b);
    }

    2、实现这个契约

    //此处我们导出了契约,这就是一个部件
       [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;
           }
       }

    3、完成测试程序

    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();
        }
    }
    
    public class MathCompute {
    
        //我们需要导入这个契约实现的部件
        [Import(typeof(ICalculator))]
        private ICalculator _calculator;
    
    
        public int Add(int a, int b) {
            return _calculator.Add(a, b);
        }
    
        public int Sub(int a, int b) {
            return _calculator.Sub(a, b);
        }
    
    }

    这里我感觉他写的这个例子没有任何意义,重在使用吧,我们初学者总归要来学习学习,查阅了相关资料补充下

  • 相关阅读:
    【机器学习】--xgboost初始之代码实现分类
    【机器学习】--xgboost从初识到应用
    【机器学习篇】--SVD从初始到应用
    【深度学习篇】--Seq2Seq模型从初识到应用
    【神经网络篇】--RNN递归神经网络初始与详解
    【机器学习】--FP-groupth算法从初始到应用
    JS Date对象
    实现表单input文本框不可编辑的三种方法
    Java 书写规范简单整理
    C3P0数据库连接池数据库插入中文乱码问题解决
  • 原文地址:https://www.cnblogs.com/wangchuang/p/4494970.html
Copyright © 2011-2022 走看看