//定义部件合同

    public interface IPluginDemo
    {
        string Text { get; }
        Guid GID { get; set; }
        void Do();
    }

//定义部件元标记合同

    public interface IPluginID
    {
        string Name { get; }
    }

//定义元标记

    [MetadataAttribute]
    [AttributeUsage(AttributeTargets.Class, Inherited = false, AllowMultiple = false)]
    public class PluginIDAttribute : Attribute, IPluginID
    {
        public string Name { get; private set; }


        public PluginIDAttribute(string pName)
        {
            this.Name = pName;
        }
    }

 //初始化目录并导入部件    

    
   private void Init()
        {
            //设置目录,让引擎能自动去发现新的扩展
            var catalog = new AggregateCatalog();
            catalog.Catalogs.Add(new DirectoryCatalog("plugins")); //等同于下行
            //catalog.Catalogs.Add(new DirectoryCatalog(Application.StartupPath  + "\\plugins\\"));


            //创建一个容器,相当于是生产车间
            _container = new CompositionContainer(catalog);


            //调用车间的ComposeParts把各个部件组合到一起
            try
            {
                this._container.ComposeParts(this);//这里只需要传入当前应用程序实例就可以了,其它部分会自动发现并组装
            }
            catch (CompositionException compositionException)
            {
                Console.WriteLine(compositionException.ToString());
            }
        }

        public Form1()
        {
            InitializeComponent();
            Init();
        }

//定义导入,延迟导入

     
   [ImportMany]
        public Lazy<IPluginDemo, IPluginID>[] plugins;

//根据插件生成菜单

            
ToolStripMenuItem item = new ToolStripMenuItem("插件");
ms.Items.Add(item);
foreach (var plugin in plugins)
{
    ToolStripMenuItem subItem = new ToolStripMenuItem(plugin.Metadata.Name);
    if (plugin.Metadata.Name == "插件1菜单")
    {
        subItem.ForeColor = Color.Red;
    }
    else { 


    }
    subItem.Click += (s, arg) => { plugin.Value.Do(); };
    item.DropDownItems.Add(subItem);
}