///// <summary> ///// 加载应用程序集 ///// </summary> ///// <param name="folder"></param> //public override void LoadAssemblies() //{ // if (PlusAssemblysList == null) // PlusAssemblysList = new List<PluginDescriptor>(); // else // PlusAssemblysList.Clear(); // #region 插件文件目录 // var plusFilesDirectoryInfo = new DirectoryInfo(SitePaths.PlusFilesDirPath); // #endregion // //插件前缀必须为Innocellence // var plusDlls = plusFilesDirectoryInfo.GetFiles("*.dll", SearchOption.AllDirectories).ToList(); // if (plusDlls.Count == 0) return; // //插件程序集 // //必须是Innocellence插件才会执行插件部署 // //dll名称必须与插件目录名称一致才能部署 // //{PlusDir}/{dllName} // //{PlusDir}/bin/{dllName} // var magicodesPlusDlls = plusDlls.Where(p => p.Name.StartsWith("Innocellence.") && (p.Directory.Name + ".dll" == p.Name || p.Directory.Parent.Name + ".dll" == p.Name)); // //依赖的程序集 // var orthersDlls = plusDlls.Where(p => !p.Name.StartsWith("Innocellence.")).Distinct(); // #region 设置程序域 // //var setup = new AppDomainSetup // //{ // // ApplicationName = "Infrastructure.Core", // // //DynamicBase = SitePaths.PlusShadowCopyDirPath, // // PrivateBinPath = SitePaths.PlusShadowCopyDirPath, // // DisallowCodeDownload = true, // // ShadowCopyFiles = "true", // // CachePath = SitePaths.PlusCacheDirPath, // // ShadowCopyDirectories = SitePaths.PlusShadowCopyDirPath, // // //PrivateBinPath = SitePaths.PlusShadowCopyDirPath // //}; // //var appDomain = AppDomain.CreateDomain("Infrastructure.Core.Domain", null, setup); // CurrentAppDomain = AppDomain.CurrentDomain; // if (!CurrentAppDomain.IsFullyTrusted) // throw new InnocellenceException("请将当前应用程序信任级别设置为完全信任"); // #endregion // var binDir = new DirectoryInfo(SitePaths.SiteRootBinDirPath); // #region 部署依赖程序集 // foreach (var plus in orthersDlls) // { // //如果网站bin目录不存在此dll,则将该dll复制到动态程序集目录 // if (binDir.GetFiles(plus.Name).Length == 0 && PluginManager.DynamicDirectory.GetFiles(plus.Name).Length == 0) // { // _PluginManager.CopyToDynamicDirectory(plus); // Assembly assembly = Assembly.LoadFrom(plus.FullName); // var assemblies = AppDomain.CurrentDomain.GetAssemblies(); // if (!assemblies.Any(p => p.FullName == assembly.FullName)) // //将程序集添加到当前应用程序域 // BuildManager.AddReferencedAssembly(assembly); // } // } // #endregion // #region 部署插件程序集 // foreach (var plus in magicodesPlusDlls) // { // PluginManager.Deploy(plus); // } // #endregion // #region 添加插件菜单 // var siteAdminNavigationRepository = APIContext<string>.Current.SiteAdminNavigationRepository; // if (siteAdminNavigationRepository == null) return; // #region 移除所有的插件菜单 // if (siteAdminNavigationRepository.GetQueryable().Any()) // { // siteAdminNavigationRepository.RemoveRange(siteAdminNavigationRepository.GetQueryable()); // siteAdminNavigationRepository.SaveChanges(); // } // #endregion // //foreach (var plusInfo in PluginManager.ReferencedPlugins) // //{ // // if (plusInfo.PlusConfigInfo != null && plusInfo.PlusConfigInfo.PlusMenus != null && plusInfo.PlusConfigInfo.PlusMenus.Length > 0) // // { // // foreach (var plusMenu in plusInfo.PlusConfigInfo.PlusMenus) // // { // // AddPlusMenu(plusInfo, siteAdminNavigationRepository, plusMenu, null); // // } // // } // //} // siteAdminNavigationRepository.SaveChanges(); // #endregion //} ///// <summary> ///// 添加菜单 ///// </summary> ///// <param name="plusInfo"></param> ///// <param name="r"></param> ///// <param name="plusMenu"></param> ///// <param name="parentId"></param> //private static void AddPlusMenu(PluginDescriptor plusInfo, SiteAdminNavigationRepositoryBase<string> r, PlusMenu plusMenu, Guid? parentId) //{ // var nav = new SiteAdminNavigationBase<string>() // { // BadgeRequestUrl = plusMenu.BadgeRequestUrl, // Href = plusMenu.Href, // IconCls = plusMenu.IconCls, // Id = plusMenu.Id ?? Guid.NewGuid(), // IsShowBadge = plusMenu.IsShowBadge, // MenuBadgeType = plusMenu.MenuBadgeType, // ParentId = plusMenu.ParentId ?? parentId, // Text = plusMenu.Text, // TextCls = plusMenu.TextCls, // Deleted = false, // //TODO:设置管理员账号 // CreateBy = "{B0FBB2AC-3174-4E5A-B772-98CF776BD4B9}", // CreateTime = DateTime.Now, // PlusId = plusInfo.Id // }; // r.Add(nav); // if (plusMenu.SubMenus != null && plusMenu.SubMenus.Length > 0) // { // foreach (var item in plusMenu.SubMenus) // { // AddPlusMenu(plusInfo, r, item, nav.Id); // } // } //} /// <summary> /// 应用程序日志类 /// </summary> //public override LoggerStrategyBase ApplicationLog //{ // get // { // return this.StrategyManager.GetDefaultStrategy<LoggerStrategyBase>(); // } //} public override void PreApplicationStartInitialize() { //初始化策略管理器 // StrategyManager = new StrategyManager(); //初始化插件管理器 //_PluginManager = new PluginManager(); //【优先加载框架策略】加载框架策略作为默认策略,如果插件实现了该策略,则会被覆盖 //默认集成了日志策略 // _PluginManager.LoadPlusStrategys(this.GetType().Assembly); //初始化嵌入资源管理器 //ManifestResourceManager = new ManifestResourceManager(); //初始化文档协议管理器 // DocumentsOpenProtocolManager = new DocumentsOpenProtocolManager(); log4net.Config.XmlConfigurator.Configure(new FileInfo(HostingEnvironment.MapPath("~/config/log4net.config"))); Log4NetLoggerAdapter adapter = new Log4NetLoggerAdapter(); LogManager.AddLoggerAdapter(adapter); //初始化配置管理器 ConfigManager = new ConfigManager(); //加载程序集 // LoadAssemblies(); //初始化Plugin PluginManager.Initialize(); //初始化系统 EngineContext.Initialize(false); //初始化数据库 DatabaseInitialize(); GlobalConfigurationManager.MapHttpAttributeRoutes(); //初始化OData GlobalConfigurationManager.InitializeODATA(); //初始化WebApi GlobalConfigurationManager.InitializeWebAPI(); //初始化MVC插件引擎 GlobalConfigurationManager.InitializeMVCEngines(); //执行plugin的install方法 //PluginManager.ExcuteAllInstallEvent(); }
/// <summary> /// 初始化 /// </summary> public override void Initialize() { #region 初始化路由 // this.RoutingManager = new RoutingManager(); // this.RoutingManager.Initialize(); #endregion //初始化全局配置 GlobalConfigurationManager.Config(); using (var watch = new CodeWatch("Initialize", 20000)) { #region 【废弃】处理插件 using (new CodeWatch("LoadPlusAndPlusResource", 5000)) { //var taskDoingList = new List<Task>(); #region 【废弃】加载程序集资源 //foreach (var plus in PluginManager.InstalledPluginsList) //{ // var loadPlusTask = new Task((plusAss) => CurrentResourceHelper.LoadPlusAndPlusResource((IPlusInfo)plusAss), plus); // taskDoingList.Add(loadPlusTask); // loadPlusTask.Start(); //} //Task.WaitAll(taskDoingList.ToArray()); //taskDoingList.Clear(); #endregion #region 【废弃】初始化程序集 //foreach (var plus in PlusAssemblysList) //{ // //程序集初始化 // var initTask = new Task((plusInfo) => // { // var plu = (IPlusInfo)plusInfo; // CurrentResourceHelper.AssemblyInitialize(plu.Assembly, plu.PlusAssemblys); // }, plus); // taskDoingList.Add(initTask); // initTask.Start(); //} //Task.WaitAll(taskDoingList.ToArray()); //taskDoingList.Clear(); #endregion #region 【废弃】执行程序集初始化函数 //foreach (var plus in PluginManager.PluginsList) //{ // var loadingTask = new Task((plusInfo) => // { // var plu = (IPlusInfo)plusInfo; // //执行插件Loading函数 // plu.Assembly.GetTypes().Where(p => p.IsClass && p.GetInterface(typeof(IPlus).FullName) != null).Each( // t => // { // using (new CodeWatch("Plu Initialize", ApplicationLog, 3000)) // { // try // { // var type = (IPlus)Activator.CreateInstance(t); // type.Initialize(); // } // catch (Exception ex) // { // ApplicationLog.Log(LoggerLevels.Error, string.Format("Assembly:{0},Type:{1}{2}", plu.Assembly.FullName, t.FullName, Environment.NewLine), ex); // } // } // }); // }, plus); // taskDoingList.Add(loadingTask); // loadingTask.Start(); //} //Task.WaitAll(taskDoingList.ToArray()); //taskDoingList.Clear(); #endregion } #endregion } }