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

  • 相关阅读:
    固态硬盘和机械硬盘的比较和SQLSERVER在两种硬盘上的性能差异
    带您理解SQLSERVER是如何执行一个查询的
    SQL Server 2000中的并行处理和执行计划中的位图运算符
    SQL2005解密已经被加密的存储过程
    使用SQLServer 2008的CDC功能实现数据变更捕获
    like语句百分号前置会使用到索引吗?
    再说一下表分区
    SQLSERVER中的元数据锁
    验证非法电话号码
    OpenCV 2.2版本号以上显示图片到 MFC 的 Picture Control 控件中
  • 原文地址:https://www.cnblogs.com/shineqiujuan/p/2985247.html
Copyright © 2011-2022 走看看