CompositionContainer学习

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();
        }
    }
}

你可能感兴趣的:(import,Export,ImportMany)