示例#1
0
        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);
            }
        }
示例#2
0
        /// <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));
            }
        }