您的位置:首页 > 编程语言 > C#

C# .NET 插件开发

2007-09-03 02:31 381 查看
1. 编写一个插件


//1 定义插件接口,将其编译成 dll,例如:


using System;




namespace PluginInterface




...{


public interface IShow




...{


string Show();


}


}






//2 编写插件. 新建dll工程,并引用第一步做的dll插件,实现其接口,例如:


namespace PluginA




...{


public class PluginA : PluginInterface.IShow




...{


public string Show()




...{


return "I am plugin A";


}


}


}

2. 在主程序中收集或载入插件


//3. 在指定目录下寻找Dll文件


private void frmMain_Load(object sender, System.EventArgs e)




...{


//获取Plugins目录中所有的DLL文件,并保存在combo中


try




...{


string path = Application.StartupPath;


path = System.IO.Path.Combine(path, "Plugins");


foreach (string file in System.IO.Directory.GetFiles(path, "*.dll"))




...{


this.cmbPlugins.Items.Add(file);


}


}


catch (Exception ex)




...{


MessageBox.Show(ex.Message);


}




}

3. 使用插件


private void btnExecute_Click(object sender, System.EventArgs e)




...{


try




...{


//1. 获得 文件名称




string asmFile = this.cmbPlugins.Text;


string asmName = System.IO.Path.GetFileNameWithoutExtension(asmFile);




if (asmFile != string.Empty)




...{




//2. 利用反射,构造DLL文件的实例




System.Reflection.Assembly asm = System.Reflection.Assembly.LoadFrom(asmFile);




//3. 利用反射,从程序集(DLL)中,提取类,并把此类实例化




PluginInterface.IShow iShow = (PluginInterface.IShow)


System.Activator.CreateInstance(asm.GetType(asmName + "Namespace." + asmName + "Class"));




//4. 在主程序中使用这个类的实例




this.label2.Text = iShow.Show();


}


}


catch (Exception ex)




...{


MessageBox.Show(ex.Message);


}


}

例子:
http://file.mofile.com/

提取码:4149002532922829
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: