/// <summary> /// 调用插件的方法 /// </summary> /// <param name="pluginIndex">插件索引</param> /// <param name="functionName">方法名称</param> /// <returns></returns> public bool InvokePluginMember(int pluginIndex, string functionName) { try { Type tObjectType = Plugins[pluginIndex].PluginAssembly. GetType(Plugins[pluginIndex].Type.ToString()); // 获取新的插件实例 IPlugin result = (IPlugin) tObjectType.InvokeMember(functionName.Trim(), BindingFlags.CreateInstance, null, null, null); // 将原有插件的属性值赋值给给新实例,这样新实例就会存有原来的属性值, // 不用再通过传参数给新实例赋值了。 result = Plugins[pluginIndex].Instance.Clone(); // 调用插件的方法 // InvokeMember的最后一个参数就是给新实例传参数的 tObjectType.InvokeMember(functionName.Trim(), BindingFlags.InvokeMethod, null, result, null); } catch (Exception Ex) { MessageBox.Show(Ex.Message); return false; } return true; }
插件应用,使用反射动态调用类成员:InvokeMember
最新推荐文章于 2020-06-06 22:51:11 发布