private static void InitPluginsByConfig(PluginCollection pluginList, string[] sortedPlugins) { if (sortedPlugins.Length == 0) { return; } //如果提供了配置信息,则完成按照配置中的插件列表来初始化,所以先清空该列表。 pluginList.Clear(); for (int i = 0, c = sortedPlugins.Length; i < c; i++) { var name = sortedPlugins[i]; IPlugin plugin = null; //可以只填写程序集名称,也可以写出插件类型的全名称。 if (!name.Contains(',')) { #region 照程序集名称来加载插件 Assembly assembly = null; try { assembly = Assembly.Load(sortedPlugins[i]); } catch (Exception ex) { throw new InvalidProgramException(string.Format("无法加载配置文件中指定的插件:{0}。", sortedPlugins[i]), ex); } plugin = CreatePluginFromAssembly(assembly); #endregion } else { #region 照插件类型名称来加载插件 Type pluginType = null; try { pluginType = Type.GetType(sortedPlugins[i]); } catch (Exception ex) { throw new InvalidProgramException(string.Format("无法加载配置文件中指定的插件类型:{0}。", sortedPlugins[i]), ex); } if (pluginType == null) { throw new InvalidProgramException(string.Format("无法加载配置文件中指定的插件类型:{0}。", sortedPlugins[i])); } plugin = Activator.CreateInstance(pluginType, true) as IPlugin; #endregion } pluginList.Add(plugin); } }
/// <summary> /// Removes all plugins from collection. /// </summary> /// <history> /// [Curtis_Beard] 07/28/2006 Created /// </history> public static void Clear() { __PluginCollection.Clear(); }
protected void Page_Load(object sender, EventArgs e) { pluginID = LoadPluginID(); rootFolder = Page.MapPath(""); if (!Page.IsPostBack) { pluginID = (!string.IsNullOrEmpty(Request.QueryString["plugin"]) ? Request.QueryString["plugin"] : pluginID); } try { PluginCollection Plugins = Plugin.GetPlugins(rootFolder, Page.Session, (Page as DefaultPage).Settings); installedPlugins.Clear(); foreach (Plugin pl in Plugins) { AdminPanelMainPlugin pctrl = (AdminPanelMainPlugin)LoadControl("../plugins/" + pl.FolderName + "/main.ascx"); pctrl.InitPlugin(); if (pctrl.CanLoadPlugin()) { installedPlugins.Add(pl); } } string mode = (!string.IsNullOrEmpty(Request.QueryString["mode"]) ? Request.QueryString["mode"] : string.Empty); if (!Page.IsPostBack) { switch (mode) { case "help": Response.Redirect((Page as DefaultPage).HelpUrl, false); break; } } if (string.IsNullOrEmpty(pluginID) && installedPlugins.Count > 0) { pluginID = installedPlugins[0].ID; } Plugin plugin = LoadPlugin(pluginID); if (plugin != null) { SavePluginID(plugin); } else { AdminPanelUtils.SetPageErrorMessage(Page, "Plugin not found!"); } WebMail.adminpanel.core.Menu ctrl = (WebMail.adminpanel.core.Menu)LoadControl("Menu.ascx"); if (ctrl != null) { ctrl.Plugins = installedPlugins; ctrl.pluginID = pluginID; menuPlaceHolder.Controls.Add(ctrl); } } catch (Exception ex) { Log.WriteException(ex); AdminPanelUtils.SetPageErrorMessage(Page, ex.Message + ": " + (ex.InnerException != null ? ex.InnerException.Message : ex.Message)); } }