.Net动态加载插件-反射
程序员文章站
2022-12-01 17:52:50
///
/// 动态加载插件
///
void LoadPlugin()
{
stri...
/// /// 动态加载插件 /// void LoadPlugin() { string[] ps = Directory.GetFiles("Plugins"); IXCodePlugin ixp; //获取插件接口的Type对象 Type tixp = typeof(IXCodePlugin); foreach (string item in ps) { //加载某个程序集文件,得到Assembly对象 Assembly asm = Assembly.LoadFile(Path.GetFullPath(item)); //获取程序集中的所有公共类型 Type[] ts = asm.GetTypes(); foreach (Type t in ts) { //判断程序集是否实现了IXCodePlugin接口 if (tixp.IsAssignableFrom(t)) { //将实现了接口的类型完成实例化,以方便调用 ixp = (IXCodePlugin)Activator.CreateInstance(t); string type = ixp.Type().ToLower(); } } } }
总共分一下几步:
1.遍历存放插件的文件夹,
2.获取插件接口的Type对象,
3.获取程序集中的所有公共类型
4.判断是否实现了,插件的接口
5.实例化实现了插件接口的类得到对象
6.调用插件中的方法