namespace MEFDemo
{
 
    class Program
    {
        private CompositionContainer _container;
        [ImportMany(typeof(ICalculator))]
        IEnumerable<Lazy<ICalculator>> calculators;

        public Program()
        {
            var catalog = new AssemblyCatalog(typeof(Program).Assembly);
            _container = new CompositionContainer(catalog);
            try
            {
                this._container.ComposeParts(this);
            }
            catch (CompositionException compositionException)
            {
                Console.WriteLine(compositionException.ToString());
            }
        }

        static void Main(string[] args)
        {
            Program p = new Program();
            string s;
            Console.WriteLine("Enter Command:");
            while (true)
            {
                s = Console.ReadLine();
                foreach (Lazy<ICalculator> i in p.calculators)
                {
                    Console.WriteLine(i.Value.Calculate(s));
                }
            }
        }
    }
    public interface ICalculator
    {
        String Calculate(String input);
    }
    [Export(typeof(ICalculator))]    
    class Add : ICalculator
    {
        string ICalculator.Calculate(string input)
        {
            return "Symbol=a,输入值" + input;
        }
    }

    [Export(typeof(ICalculator))]   
    class Add2 : ICalculator
    {
        string ICalculator.Calculate(string input)
        {
            return "Symbol=b,输入值" + input;
        }
    }
}