コード例 #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>
        /// 以菜单形式加载插件
        /// <para>将<see cref="IPluginView"/>中的插件以<see cref="MenuStrip"/>的菜单形式来加载, 在点击菜单、窗口加载、窗口关闭时调用相应插件</para>
        /// </summary>
        /// <param name="menuStrip"></param>
        /// <param name="view"></param>
        /// <param name="form"></param>
        /// <param name="cmdData">插件命令的传入参数</param>
        /// <param name="bingdingPluginCommandEvents">插件命令事件处理方法</param>
        public static void LoadPluginView <TCmdData>(this MenuStrip menuStrip,
                                                     Form form, IPluginView view, TCmdData cmdData, Action <IPluginView> bingdingPluginCommandEvents)
        {
            try
            {
                var container = view.QueryContainer(menuStrip);
                menuStrip.LoadPluginContainer(container);
                container.LoadPluginCommands(cmdData);
                bingdingPluginCommandEvents(view);//绑定插件命令事件处理

                //在窗口加载时、窗口关闭时触发相应插件
                view.InvokePlugins(EPluginInvokeType.OnViewLoad, form);
                form.FormClosing += (sender, e) => view.InvokePlugins(EPluginInvokeType.OnViewClose, form);
            }
            catch (Exception ex) { MessageBoxEx.ShowError(ex); }
        }