• 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

  • 相关阅读:
    阿里安全归零实验室招聘各路大牛!offer好说!
    露脸!钉钉通过SOC2隐私性原则审计,安全和隐私保护达超一流国际标准
    BAT齐聚阿里安全-ASRC生态大会:呼吁联合共建网络安全白色产业链
    v3-4_-vict-、-vinc-胜利,征服
    Grammar01 语法七要素之一_词类
    Grammar00_英语学习铁律
    SpokenEnglish01_ When's it due?
    SpringBoot31 重识Spring01-环境搭建、Actuator监控、属性配置、多环境配置
    Shrio04 自定义Realm
    Shrio03 Authenticator、配置多个Realm、SecurityManager认证策略
  • 原文地址:https://www.cnblogs.com/shineqiujuan/p/2985247.html
Copyright © 2020-2023  润新知