CompositionContainer学习

来源:互联网 发布:intouch组态软件 破解 编辑:程序博客网 时间:2024/05/09 16:20
using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;namespace ConsoleApplication1{    using System.ComponentModel.Composition;    using System.ComponentModel.Composition.Hosting;    using System.Reflection;    public interface IBookService    {        string BookName { get; set; }        string GetBookName();    }    #region    //[Export(typeof(IBookService))] //将类声明导出为IBookService接口类型    //[Export("契约名")] //默认的导出类型是object类型    [Export("MusicBook", typeof(IBookService))] //契约名    public class MusicBook : IBookService    {        public string BookName { get; set; }        public string GetBookName()        {            return "MusicBook";        }    }    [Export("MusicBook", typeof(IBookService))]    public class MathBook : IBookService    {        public string BookName { get; set; }        public string GetBookName()        {            return "MathBook";        }    }    [Export("MusicBook", typeof(IBookService))]    public class HistoryBook : IBookService    {        public string BookName { get; set; }        public string GetBookName()        {            return "HistoryBook";        }    }    #endregion    class Program    {        //[Import]         //[Import("MusicBook")] //使用[Import]导入刚刚导出的MusicBook        [ImportMany("MusicBook")]        public IEnumerable<IBookService> Service { get; set; }        //public IBookService Service { get; set; }        private void Compose()        {            var catalog = new AssemblyCatalog(Assembly.GetExecutingAssembly());            CompositionContainer container = new CompositionContainer(catalog);            container.ComposeParts(this);        }        static void Main(string[] args)        {            Program pro = new Program();            pro.Compose();            if (pro.Service != null)            {                //Console.WriteLine(pro.Service.GetBookName());                foreach (var s in pro.Service)                    Console.WriteLine(s.GetBookName());            }            Console.Read();        }    }}

0 0
原创粉丝点击