示例#1
0
        /// <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);             //创建容器包含的插件对应的命令
        }
示例#2
0
        /// <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);              //创建容器包含的插件对应的命令
        }
示例#3
0
        /// <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));
        }
示例#4
0
        /// <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);
        }