/// <summary> /// 从插件方案中查找<see cref="MenuStrip"/>对应的插件,加载插件 /// </summary> /// <param name="menuStrip"></param> /// <param name="pluginPlan"></param> /// <param name="cmdData">插件命令的传入参数,泛型对象</param> public static void LoadPlugins <TCmdData>(this MenuStrip menuStrip, IPluginPlan pluginPlan, TCmdData cmdData) { var form = menuStrip.FindForm(); var view = pluginPlan.QueryViews(form); //找到窗体对应的插件视图 var container = QueryContainer(view, menuStrip); //找到控件对应的插件容器 menuStrip.LoadPluginContainer(container); //向控件加载插件容器包含的插件 container.LoadPluginCommands(cmdData); //创建容器包含的插件对应的命令 }
/// <summary> /// 从插件方案中查找RibbonControl对应的插件,加载插件 /// </summary> /// <param name="ribbonCtrl"></param> /// <param name="pluginPlan"></param> /// <param name="cmdData">插件命令的传入参数,泛型对象</param> public static void LoadPlugins <TCmdData>(this RibbonControl ribbonCtrl, IPluginPlan pluginPlan, TCmdData cmdData) { var form = ribbonCtrl.FindForm(); var view = pluginPlan.QueryViews(form); //找到窗体对应的插件视图 var container = QueryContainer(view, ribbonCtrl); //找到控件对应的插件容器 container.LoadPluginContainer(ribbonCtrl); //向控件加载插件容器包含的插件 container.LoadPluginCommands(cmdData); //创建容器包含的插件对应的命令 }
/// <summary> /// 调用相应类型的插件 /// </summary> /// <param name="view"></param> /// <param name="invokeType"></param> public static void InvokePlugins(this IPluginView view, IPluginPlan pluginPlan, EPluginInvokeType invokeType) { if (pluginPlan == null) { return; } var pluginView = pluginPlan.Views.First(v => v.Name == view.Name && v.Text == view.Text); var plugins = pluginView.QueryPlugins(invokeType).ToList(); plugins.ForEach(p => p.Command.Invoke(view)); }
/// <summary> /// 从插件方案中,查找与指定窗体关联的插件视图 /// </summary> /// <param name="form"></param> /// <param name="pluginPlan"></param> /// <returns></returns> private static IPluginView QueryViews(this IPluginPlan pluginPlan, Form form) { var name = form.Name; var text = form.Text; var view = pluginPlan.Views.FirstOrDefault(v => v.Name == name && v.Text == text); if (view == null) { throw new Exception($"在插件方案“{pluginPlan.Name}”中找不到窗体“{text}”({name})的对应的插件配置!"); } return(view); }