예제 #1
0
파일: Form1.cs 프로젝트: bzy734084360/Study
        private void Form1_Load(object sender, EventArgs e)
        {
            //主程序直接去Lib目录中搜索DLL文件
            //第一步,获取当前程序运行的目录
            string name = Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), "Lib");

            //获取所有Lib文件夹中的dll文件
            string[] files = Directory.GetFiles(name, "*.dll");
            //MessageBox.Show(files[0]);
            //遍历所有的dll文件路径
            foreach (string item in files)
            {
                //反射获取dll
                Assembly ass = Assembly.LoadFile(item);
                //获取所有公共的Type
                Type[] types   = ass.GetExportedTypes();
                Type   tpIEdit = typeof(IEditPlus);//获取接口的Type
                for (int i = 0; i < types.Length; i++)
                {
                    //判断每个type对象是否实现了接口
                    if (tpIEdit.IsAssignableFrom(types[i]) && !types[i].IsAbstract)
                    {
                        //创建接口实例
                        IEditPlus iedit = Activator.CreateInstance(types[i]) as IEditPlus;
                        //显示到视图下面
                        ToolStripItem tsi = tsm.DropDownItems.Add(iedit.Name);
                        //将该接口存储到tsi对象的tag中
                        tsi.Tag = iedit;
                        //给菜单注册单机事件
                        tsi.Click += new EventHandler(tsi_Click);
                    }
                }
            }
        }
예제 #2
0
파일: Form1.cs 프로젝트: bzy734084360/Study
        private void tsi_Click(object sender, EventArgs e)
        {
            ToolStripItem tsi    = sender as ToolStripItem;
            IEditPlus     iedits = tsi.Tag as IEditPlus;

            textBox1.Text = iedits.ChangeString(textBox1);
        }
예제 #3
0
        private void Form1_Load(object sender, EventArgs e)
        {
            //从Lib文件夹获得获得DLL文件
            string appPath = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location); //得到程序集所在的文件路径
            string libPath = Path.Combine(appPath, "Lib");                                    //得到Lib路径

            string[] files = Directory.GetFiles(libPath, "*.dll");

            for (int i = 0; i < files.Length; i++)
            {
                Assembly asb  = Assembly.LoadFile(files[i]);
                Type[]   tps  = asb.GetTypes();    //得到类型
                Type     iEdi = typeof(IEditPlus); //获取接口的类型

                for (int j = 0; j < tps.Length; j++)
                {
                    if (iEdi.IsAssignableFrom(tps[j]) && !(tps[i].IsAbstract))
                    {
                        IEditPlus     plus = (IEditPlus)Activator.CreateInstance(tps[j]);
                        ToolStripItem tsi  = tmi.DropDownItems.Add(plus.Name);

                        tsi.Tag = plus;

                        tsi.Click += new EventHandler(tsi_Click);
                    }
                }//判断插件是否符合规范
            }
        }