.Net动态加载插件-反射

时间:2021-09-03 16:08:11
	/// <summary>
/// 动态加载插件
/// </summary>
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.调用插件中的方法