예제 #1
0
        /// <summary>
        /// 加载插件,之后必须重启中间件
        /// </summary>
        /// <param name="plugfile"></param>
        public static void AddPlugin(string pluginfile)
        {
            string filepath = AppGlobal.AppRootPath + pluginfile;//转为绝对路径

            ModulePlugin mp = new ModulePlugin();

            mp.appType = AppGlobal.appType;
            mp.LoadPlugin(filepath);

            PluginSysManage.AddPlugin(mp.plugin.name, mp.plugin.title, pluginfile, mp.plugin.version);
        }
예제 #2
0
        public static Dictionary <string, ModulePlugin> PluginDic;//本地插件
        /// <summary>
        /// 加载所有插件
        /// </summary>
        public static void LoadAllPlugin()
        {
            PluginDic = new Dictionary <string, ModulePlugin>();
            List <string> pflist = PluginSysManage.GetAllPluginFile();

            for (int i = 0; i < pflist.Count; i++)
            {
                //AddPlugin(pflist[i]);
                string       filepath = AppGlobal.AppRootPath + pflist[i];//转为绝对路径
                ModulePlugin mp       = new ModulePlugin();
                mp.appType = AppGlobal.appType;
                mp.LoadPlugin(filepath);
                mp.LoadAttribute(filepath);
                PluginDic.Add(mp.plugin.name, mp);
            }
        }
        /// <summary>
        /// 加载插件,创建AppDomain来动态加载或卸载dll
        /// </summary>
        /// <param name="plugfile"></param>
        public static void AddPlugin(string plugfile)
        {
            if (PluginDic == null)
            {
                PluginDic = new Dictionary <string, ModulePlugin>();
            }
            if (DomainDic == null)
            {
                DomainDic = new Dictionary <string, AppDomain>();
            }

            if (IsOpenDomain)//开启程序域
            {
                //AppDomainSetup setup = new AppDomainSetup();
                //setup.ApplicationName = "ApplicationLoader";
                //setup.ApplicationBase = AppDomain.CurrentDomain.BaseDirectory;
                //setup.PrivateBinPath = System.IO.Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "private");
                //setup.CachePath = setup.ApplicationBase;
                //setup.ShadowCopyFiles = "true";
                //setup.ShadowCopyDirectories = setup.ApplicationBase;
                //AppDomain.CurrentDomain.SetShadowCopyFiles();
                //AppDomain appDomain = AppDomain.CreateDomain("ApplicationLoaderDomain", null, setup);
                //String name = Assembly.GetExecutingAssembly().GetName().FullName;
                //ModulePlugin mp = (ModulePlugin)appDomain.CreateInstanceAndUnwrap(name, typeof(ModulePlugin).FullName);
                //mp.appType = AppGlobal.appType;
                //mp.LoadPlugin(plugfile);

                //if (PluginDic.ContainsKey(mp.plugin.name) == false)
                //{
                //    PluginDic.Add(mp.plugin.name, mp);
                //    DomainDic.Add(mp.plugin.name, appDomain);
                //    mp.LoadAttribute(plugfile);
                //}
            }
            else
            {
                ModulePlugin mp = new ModulePlugin();
                mp.appType = AppGlobal.appType;
                mp.LoadPlugin(plugfile);

                if (PluginDic.ContainsKey(mp.plugin.name) == false)
                {
                    PluginDic.Add(mp.plugin.name, mp);
                    mp.LoadAttribute(plugfile);
                }
            }
        }
예제 #4
0
        public static void AddPlugin(string plugfile)
        {
            if (PluginDic == null)
            {
                PluginDic = new Dictionary <string, ModulePlugin>();
            }

            ModulePlugin mp = new ModulePlugin();

            mp.LoadPlugin(plugfile);

            if (PluginDic.ContainsKey(mp.plugin.name) == false)
            {
                PluginDic.Add(mp.plugin.name, mp);
                List <string> dllList = new List <string>();
                switch (AppGlobal.appType)
                {
                case AppType.Web:
                    foreach (businessinfoDll dll in mp.plugin.businessinfoDllList)
                    {
                        dllList.Add(AppGlobal.AppRootPath + "bin\\" + dll.name);
                    }
                    if (dllList.Count > 0)
                    {
                        EntityManager.LoadAttribute(dllList, mp.cache, mp.plugin.name);
                        WebControllerManager.LoadAttribute(dllList, mp);
                        WebServicesManager.LoadAttribute(dllList, mp.cache, mp.plugin.name);
                    }
                    break;

                case AppType.Winform:
                    foreach (businessinfoDll dll in mp.plugin.businessinfoDllList)
                    {
                        dllList.Add(AppGlobal.AppRootPath + dll.name);
                    }
                    if (dllList.Count > 0)
                    {
                        EntityManager.LoadAttribute(dllList, mp.cache, mp.plugin.name);
                        WinformControllerManager.LoadAttribute(dllList, mp);
                    }
                    break;

                case AppType.WCF:
                    foreach (businessinfoDll dll in mp.plugin.businessinfoDllList)
                    {
                        dllList.Add(AppGlobal.AppRootPath + dll.name);
                    }
                    if (dllList.Count > 0)
                    {
                        EntityManager.LoadAttribute(dllList, mp.cache, mp.plugin.name);
                        WcfControllerManager.LoadAttribute(dllList, mp);
                    }
                    break;

                case AppType.WCFClient:
                    foreach (businessinfoDll dll in mp.plugin.businessinfoDllList)
                    {
                        dllList.Add(AppGlobal.AppRootPath + dll.name);
                    }
                    if (dllList.Count > 0)
                    {
                        WinformControllerManager.LoadAttribute(dllList, mp);
                    }
                    break;
                }
            }
        }