zoukankan      html  css  js  c++  java
  • MEF Managed Extensibility Framework

    using System;
    using System.Collections.Generic;
    using System.ComponentModel.Composition;
    using System.ComponentModel.Composition.Hosting;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    
    namespace MEFDemo
    {
       class Program
       {
          private CompositionContainer _container;
          [Import(typeof(ICalculator))]
          public ICalculator calculator;
    
          [Export(typeof(ICalculator))]
          class MySimpleCalculator : ICalculator
          {
             [ImportMany]
             IEnumerable<Lazy<IOperation, IOperationData>> operations;
             public string Calculate(string input)
             {
                int left;
                int right;
                Char operation;
                int fn = FindFirstNonDigit(input); //finds the operator
                if (fn < 0) return "Could not parse command.";
    
                try
                {
                   //separate out the operands
                   left = int.Parse(input.Substring(0, fn));
                   right = int.Parse(input.Substring(fn + 1));
                }
                catch
                {
                   return "Could not parse command.";
                }
    
                operation = input[fn];
    
                foreach (Lazy<IOperation, IOperationData> i in operations)
                {
                   if (i.Metadata.Symbol.Equals(operation)) return i.Value.Operate(left, right).ToString();
                }
                return "Operation Not Found!";
             }
    
             private int FindFirstNonDigit(String s)
             {
                for (int i = 0; i < s.Length; i++)
                {
                   if (!(Char.IsDigit(s[i]))) return i;
                }
                return -1;
             }
          }
          public Program()
          {
             var _catalog = new AggregateCatalog();
             _catalog.Catalogs.Add(new AssemblyCatalog(typeof (Program).Assembly));
             _container=new CompositionContainer(_catalog);
             //Fill the imports of this object
             try
             {
                this._container.ComposeParts(this);
             }
             catch (CompositionException compositionException)
             {
                Console.WriteLine(compositionException.ToString());
             }
          }
    
    
          static void Main(string[] args)
          {
             Program p = new Program(); //Composition is performed in the constructor
             String s;
             Console.WriteLine("Enter Command:");
             while (true)
             {
                s = Console.ReadLine();
                Console.WriteLine(p.calculator.Calculate(s));
             }
          }
       }
    
       [Export(typeof(IOperation))]
       [ExportMetadata("Symbol", '+')]
       class Add : IOperation
       {
          public int Operate(int left, int right)
          {
             return left + right;
          }
       }
    
       [Export(typeof(IOperation))]
       [ExportMetadata("Symbol", '-')]
       class Subtract : IOperation
       {
          public int Operate(int left, int right)
          {
             return left - right;
          }
       }
    
       public interface ICalculator
       {
          String Calculate(String input);
       }
    
       public interface IOperation
       {
          int Operate(int left, int right);
       }
    
       public interface IOperationData
       {
          Char Symbol { get; }
       }
    
    
    }

    http://msdn.microsoft.com/zh-cn/library/vstudio/dd460648.aspx

  • 相关阅读:
    Delphi 中的颜色常量及效果图
    WinAPI: waveInGetErrorText 根据错误号得到错误描述
    WinAPI: waveInGetDevCaps 查询输入设备的性能
    动画演示 Delphi 2007 IDE 功能[2] 定义变量
    动画演示 Delphi 2007 IDE 功能[1] 建立工程、添加控件
    Delphi 的绘图功能[15] 再谈文字的高度与宽度: Canvas.TextExtent
    WinAPI: waveInAddBuffer 向波形输入设备发送一个输入缓冲区
    动画演示 Delphi 2007 IDE 功能[3] 修改属性
    颜色转换函数: 从 Delphi 到 Html
    Spider trap Wikipedia, the free encyclopedia
  • 原文地址:https://www.cnblogs.com/shineqiujuan/p/2985247.html
Copyright © 2011-2022 走看看