コード例 #1
0
        /// <summary>
        /// 动态加载数据库工厂
        /// </summary>
        /// <param name="providerInvariantName"></param>
        /// <param name="dbType"></param>
        /// <returns></returns>
        public static DbProviderFactory GetFactory(string dbKey)
        {
            try
            {
                var config = GetConfig(dbKey);
                if (BaseCache.Exists(config.ProviderName))
                {
                    return(BaseCache.Get <object>(config.ProviderName) as DbProviderFactory);
                }
                else
                {
                    var assembly = AppDomain.CurrentDomain.GetAssemblies().ToList().Find(a => a.FullName.Split(',')[0] == config.ProviderName);
                    if (assembly == null)
                    {
                        assembly = Assembly.Load(config.ProviderName);
                    }

                    var    type     = assembly.GetType(config.FactoryClient, false);
                    object instance = null;

                    if (type != null)
                    {
                        instance = Activator.CreateInstance(type);
                    }

                    BaseCache.Set <object>(config.ProviderName, instance);
                    return(instance as DbProviderFactory);
                }
            }
            catch
            {
                return(null);
            }
        }
コード例 #2
0
        private static void SetPageItemsDownloaded(IEnumerable <Objects.LatestPageIndexItem> items, string languageCode)
        {
            string fileName          = string.Format("AgilityPageIndex_{0}.bin", languageCode);
            string pageIndexFilePath = Path.Combine(BaseCache.GetLocalContentFilePath(), fileName);

            lock (_pageIndexLock)
            {
                Objects.LatestPageIndex index = GetLatestPageItemIndex(languageCode);
                if (index == null)
                {
                    return;
                }

                Objects.LatestPageIndexItem indexItem = null;
                foreach (var item in items)
                {
                    if (index.Index.TryGetValue(item.PageID, out indexItem))
                    {
                        indexItem.Downloaded = item.Downloaded;
                    }
                }

                BaseCache.WriteFile(index, pageIndexFilePath);
                AgilityContext.HttpContext.Items[fileName] = index;
            }
        }
コード例 #3
0
ファイル: GenericCache.cs プロジェクト: ouyuanwei/Dome
 static GenericCache()
 {
     if (!string.IsNullOrEmpty(_cacheClearSpanStr) && Regex.IsMatch(_cacheClearSpanStr, @"\d+"))
     {
         int span = 0;
         if (int.TryParse(_cacheClearSpanStr, out span))
         {
             _cacheClearSpan = span;
         }
     }
     Task.Run(() =>//启动一个线程自动清理缓存
     {
         while (true)
         {
             lock (_lock)
             {
                 List <string> keyList = new List <string>();
                 foreach (var key in _dicCache.Keys)
                 {
                     BaseCache cache = _dicCache[key];
                     if (cache.OverdueTime < DateTime.Now)
                     {
                         keyList.Add(key);
                     }
                 }
                 keyList.ForEach(k => _dicCache.Remove(k));
             }
             Thread.Sleep(1000 * _cacheClearSpan);
         }
     });
 }
コード例 #4
0
ファイル: BaseLogic.cs プロジェクト: SmashDream0/MAC_2.0
        public BaseLogic(BaseCache cache, DataBase.ITable table)
        {
            this.Table = table;
            this.Cache = cache;

            //addLogic(this);
        }
コード例 #5
0
        public static void UpdateDynamicPageFormFormulas(AgilityContent existingContent, AgilityContent deltaContent)
        {
            if (deltaContent == null || deltaContent.DataSet == null)
            {
                return;
            }



            Dictionary <string, List <int> > dpIndex = BaseCache.GetDynamicPageIndex();

            List <int> lstPageIDs = null;

            if (dpIndex.TryGetValue(deltaContent.ReferenceName.ToLowerInvariant(), out lstPageIDs))
            {
                foreach (int pageID in lstPageIDs)
                {
                    AgilityPage page = BaseCache.GetPageFromID(pageID, deltaContent.LanguageCode, AgilityContext.WebsiteName, null);
                    if (page != null)
                    {
                        //update all of the DynamicPageIndexes that this content appears on...
                        BaseCache.UpdateDynamicPageFormulaIndex(page, existingContent, deltaContent, deltaContent.ReferenceName, existingContent == null);
                    }
                }
            }
        }
コード例 #6
0
 /// <summary>
 /// 删除缓存
 /// </summary>
 public static void Remove(string cacheType, string key)
 {
     if (string.Compare(cacheType, CacheType.Web, true) == 0)
     {
         BaseCache.Remove(key);
     }
     else if (string.Compare(cacheType, CacheType.Redis, true) == 0)
     {
         IRedis.RemoveAsy(key);
     }
 }
コード例 #7
0
 /// <summary>
 /// 删除缓存
 /// </summary>
 public static void Remove(string cacheType, string key)
 {
     if (cacheType.ToLower() == CacheType.Web)
     {
         BaseCache.Remove(key);
     }
     else if (cacheType.ToLower() == CacheType.Redis)
     {
         IRedis.RemoveAsy(key);
     }
 }
コード例 #8
0
 /// <summary>
 /// 设置缓存
 /// </summary>
 public static void Set <T>(string cacheType, string key, T value, int Hours = 8640) where T : class, new()
 {
     if (cacheType.ToLower() == CacheType.Web)
     {
         BaseCache.Set <T>(key, value, Hours);
     }
     else if (cacheType.ToLower() == CacheType.Redis)
     {
         IRedis.SetAsy <T>(key, value, Hours);
     }
 }
コード例 #9
0
 /// <summary>
 /// 设置缓存
 /// </summary>
 public static void Set(string cacheType, string key, string value, int Hours = 8640)
 {
     if (cacheType.ToLower() == CacheType.Web)
     {
         BaseCache.Set(key, value, Hours);
     }
     else if (cacheType.ToLower() == CacheType.Redis)
     {
         IRedis.SetAsy(key, value, Hours);
     }
 }
コード例 #10
0
 /// <summary>
 /// 设置缓存
 /// </summary>
 public static void Set <T>(string cacheType, string key, T value, int Hours = 8640) where T : class, new()
 {
     if (string.Compare(cacheType, CacheType.Web, true) == 0)
     {
         BaseCache.Set <T>(key, value, Hours);
     }
     else if (string.Compare(cacheType, CacheType.Redis, true) == 0)
     {
         IRedis.SetAsy <T>(key, value, Hours);
     }
 }
コード例 #11
0
 /// <summary>
 /// 设置缓存
 /// </summary>
 public static void Set(string cacheType, string key, string value, int Hours = 8640)
 {
     if (string.Compare(cacheType, CacheType.Web, true) == 0)
     {
         BaseCache.Set(key, value, Hours);
     }
     else if (string.Compare(cacheType, CacheType.Redis, true) == 0)
     {
         IRedis.SetAsy(key, value, Hours);
     }
 }
コード例 #12
0
 /// <summary>
 /// 是否存在
 /// </summary>
 public static bool Exists(string cacheType, string key)
 {
     if (cacheType.ToLower() == CacheType.Web)
     {
         return(BaseCache.Exists(key));
     }
     else if (cacheType.ToLower() == CacheType.Redis)
     {
         return(IRedis.ExistsAsy(key).Result);
     }
     return(false);
 }
コード例 #13
0
 /// <summary>
 /// 获取缓存
 /// </summary>
 public static T Get <T>(string cacheType, string key) where T : class, new()
 {
     if (cacheType.ToLower() == CacheType.Web)
     {
         return(BaseCache.Get <T>(key));
     }
     else if (cacheType.ToLower() == CacheType.Redis)
     {
         return(IRedis.GetAsy <T>(key).Result);
     }
     return(new T());
 }
コード例 #14
0
 /// <summary>
 /// 获取缓存
 /// </summary>
 public static T Get <T>(string cacheType, string key) where T : class, new()
 {
     if (string.Compare(cacheType, CacheType.Web, true) == 0)
     {
         return(BaseCache.Get <T>(key));
     }
     else if (string.Compare(cacheType, CacheType.Redis, true) == 0)
     {
         return(IRedis.GetAsy <T>(key).Result);
     }
     return(new T());
 }
コード例 #15
0
 /// <summary>
 /// 是否存在
 /// </summary>
 public static bool Exists(string cacheType, string key)
 {
     if (string.Compare(cacheType, CacheType.Web, true) == 0)
     {
         return(BaseCache.Exists(key));
     }
     else if (string.Compare(cacheType, CacheType.Redis, true) == 0)
     {
         return(IRedis.ExistsAsy(key).Result);
     }
     return(false);
 }
コード例 #16
0
        public async Task <IResponseOutput> GetPassWordEncryptKeyAsync()
        {
            //写入Redis
            var guid      = Guid.NewGuid().ToString("N");
            var key       = string.Format(CacheKey.PassWordEncryptKey, guid);
            var encyptKey = StringHelper.GenerateRandom(8);
            await BaseCache.SetAsync(key, encyptKey, TimeSpan.FromMinutes(5));

            var data = new { key = guid, encyptKey };

            return(ResponseOutput.Ok(data));
        }
コード例 #17
0
        /// <summary>
        /// 获取缓存
        /// </summary>
        public static string Get(string cacheType, string key)
        {
            if (cacheType.ToLower() == CacheType.Web)
            {
                return(BaseCache.Get(key));
            }
            else if (cacheType.ToLower() == CacheType.Redis)
            {
                return(IRedis.GetAsy(key).Result);
            }

            return("");
        }
コード例 #18
0
        /// <summary>
        /// 获取缓存
        /// </summary>
        public static string Get(string cacheType, string key)
        {
            if (string.Compare(cacheType, CacheType.Web, true) == 0)
            {
                return(BaseCache.Get(key));
            }
            else if (string.Compare(cacheType, CacheType.Redis, true) == 0)
            {
                return(IRedis.GetAsy(key).Result);
            }

            return("");
        }
コード例 #19
0
        public static DataRow GetCodeItem(string path)
        {
            //path is like this: DynamicAgilityCode/[ContentReferenceName]/[ItemReferenceName].ext
            var pre = Agility.Web.HttpModules.AgilityHttpModule.DynamicCodePrepend;

            string p1 = path.Substring(path.IndexOf(pre, StringComparison.CurrentCultureIgnoreCase) + pre.Length);

            if (p1.IndexOf("/") == -1 || p1.IndexOf(".") < p1.IndexOf("/"))
            {
                return(null);
            }

            string referenceName = p1.Substring(0, p1.IndexOf("/"));

            //get the content.
            var content = BaseCache.GetContent(referenceName, LANGUAGECODE_CODE, AgilityContext.WebsiteName);

            if (content == null ||
                content.DataSet == null ||
                (!content.DataSet.Tables.Contains("ContentItems")) ||
                content.DataSet.Tables["ContentItems"].Rows.Count == 0)
            {
                return(null);
            }

            int slashIndex = p1.IndexOf("/");
            int dotIndex   = p1.IndexOf(".");

            string itemReferenceName = p1.Substring(slashIndex + 1, dotIndex - slashIndex - 1);
            string filter            = string.Format("ReferenceName = '{0}'", itemReferenceName.Replace("'", "''"));

            StringBuilder sb = new StringBuilder();

            DataRow[] rows = null;
            try
            {
                rows = content.DataSet.Tables["ContentItems"].Select(filter);
            }
            catch { }


            if (rows == null || rows.Length == 0)
            {
                return(null);
            }


            DataRow row = rows[0];

            return(row);
        }
コード例 #20
0
        // 构建函数
        static DynamicGet()
        {
            var key = string.Format("DynamicGet<T>.{0}.{1}", typeof(T)?.Namespace, typeof(T).Name);

            if (!BaseCache.Exists(key))
            {
                GetValueDelegate = GenerateGetValue();
                BaseCache.Set <object>(key, GetValueDelegate);
            }
            else
            {
                GetValueDelegate = BaseCache.Get <object>(key) as Func <object, string, object>;
            }
        }
コード例 #21
0
        public static void UpdateDynamicPageIndex(AgilityPage page)
        {
            if (!string.IsNullOrEmpty(page.DynamicPageContentViewReferenceName) ||
                !string.IsNullOrEmpty(page.DynamicPageParentFieldName))
            {
                if (!string.IsNullOrEmpty(page.DynamicPageContentViewReferenceName.ToLowerInvariant()))
                {
                    BaseCache.UpdateDynamicPageIndex(page.ID, page.DynamicPageContentViewReferenceName.ToLowerInvariant());
                }

                //update the Dynamic Page Formula Index that use this page...
                BaseCache.ClearDynamicDynamicPageFormulaIndex(page);
            }
        }
コード例 #22
0
ファイル: Cache.cs プロジェクト: ouyuanwei/MyFirstEF
 /// <summary>
 /// 获取缓存
 /// </summary>
 /// <typeparam name="T">缓存数据类型</typeparam>
 /// <param name="key">关键字key</param>
 /// <returns></returns>
 public static T GetCache <T>(string key)
 {
     if (_dicCache.ContainsKey(key))
     {
         lock (_lock)
         {
             if (_dicCache.ContainsKey(key) && _dicCache[key].OverdueTime > DateTime.Now && _dicCache[key].GetType() == typeof(BaseCache <T>))
             {
                 BaseCache <T> cache = (BaseCache <T>)_dicCache[key];
                 return(cache.Data);
             }
         }
     }
     return(default(T));
 }
コード例 #23
0
        public T GetContentItem <T>() where T : AgilityContentItem
        {
            var content = BaseCache.GetContent(ContentReferenceName, AgilityContext.LanguageCode, AgilityContext.WebsiteName, false);

            var row = content.GetItemByContentID(ContentID);

            if (row == null)
            {
                return(null);
            }

            Type            type   = typeof(T);
            ConstructorInfo constr = type.GetConstructor(System.Type.EmptyTypes);

            return(AgilityContentRepository <T> .ConvertDataRowToObject(constr, row, AgilityContext.LanguageCode, ContentReferenceName));
        }
コード例 #24
0
        private static Objects.LatestIndex GetLatestContentDefinitionIndex()
        {
            string fileName      = "AgilityContentDefinitionIndex.bin";
            string indexFilePath = Path.Combine(BaseCache.GetLocalContentFilePath(), fileName);

            Objects.LatestIndex index = AgilityContext.HttpContext.Items[fileName] as Objects.LatestIndex;
            if (index == null)
            {
                lock (_contentDefIndexLock)
                {
                    index = AgilityContext.HttpContext.Items[fileName] as Objects.LatestIndex;
                    if (index == null)
                    {
                        index = BaseCache.ReadFile <Objects.LatestIndex>(indexFilePath);
                        if (index == null)
                        {
                            index = new Objects.LatestIndex();
                        }

                        DateTime maxModDate = index.MaxModDate;

                        var indexDelta = ServerAPI.GetLatestContentDefinitionIndex(maxModDate);
                        if (indexDelta != null)
                        {
                            foreach (var item in indexDelta)
                            {
                                if (item.ModifiedOn > index.MaxModDate)
                                {
                                    index.MaxModDate = item.ModifiedOn;
                                }

                                index.Index[item.ID] = new Objects.LatestIndexItem()
                                {
                                    ID            = item.ID,
                                    ModifiedOnStr = item.ModifiedOnStr,
                                    Downloaded    = false
                                };
                            }

                            BaseCache.WriteFile(index, indexFilePath);
                            AgilityContext.HttpContext.Items[fileName] = index;
                        }
                    }
                }
            }
            return(index);
        }
コード例 #25
0
        private static Objects.LatestContentItemIndex GetLatestContentItemIndex(string languageCode)
        {
            string fileName             = string.Format("AgilityContentIndex_{0}.bin", languageCode);
            string contentIndexFilePath = Path.Combine(BaseCache.GetLocalContentFilePath(), fileName);

            Objects.LatestContentItemIndex index = AgilityContext.HttpContext.Items[fileName] as Objects.LatestContentItemIndex;
            if (index == null)
            {
                lock (_contentIndexLock)
                {
                    index = AgilityContext.HttpContext.Items[fileName] as Objects.LatestContentItemIndex;
                    if (index == null)
                    {
                        index = BaseCache.ReadFile <Objects.LatestContentItemIndex>(contentIndexFilePath);
                        if (index == null)
                        {
                            index = new Objects.LatestContentItemIndex();
                        }

                        int maxVersionID = index.MaxVersionID;

                        var indexDelta = ServerAPI.GetLatestContentItemIndex(maxVersionID, languageCode);
                        if (indexDelta != null)
                        {
                            foreach (var item in indexDelta)
                            {
                                if (item.MaxVersionID > index.MaxVersionID)
                                {
                                    index.MaxVersionID = item.MaxVersionID;
                                }

                                index.Index[item.ReferenceName] = new Objects.LatestContentIndexItem()
                                {
                                    MaxVersionID  = item.MaxVersionID,
                                    ReferenceName = item.ReferenceName,
                                    Downloaded    = false
                                };
                            }

                            BaseCache.WriteFile(index, contentIndexFilePath);
                            AgilityContext.HttpContext.Items[fileName] = index;
                        }
                    }
                }
            }
            return(index);
        }
コード例 #26
0
        /// <summary>
        /// 动态加载数据库工厂
        /// </summary>
        /// <param name="providerInvariantName"></param>
        /// <param name="dbType"></param>
        /// <returns></returns>
        public static DbProviderFactory GetFactory(string dbKey, bool IsResource = false, string dbFile = "db.json")
        {
            try
            {
                var config = new ConfigModel();

                if (IsResource)
                {
                    var projectName = Assembly.GetCallingAssembly().GetName().Name;
                    config = DataConfig.Get(dbKey, projectName, dbFile);
                }
                else
                {
                    config = DataConfig.Get(dbKey);
                }

                if (BaseCache.Exists(config.ProviderName))
                {
                    return(BaseCache.Get <object>(config.ProviderName) as DbProviderFactory);
                }
                else
                {
                    var assembly = AppDomain.CurrentDomain.GetAssemblies().ToList().Find(a => a.FullName.Split(',')[0] == config.ProviderName);
                    if (assembly == null)
                    {
                        assembly = Assembly.Load(config.ProviderName);
                    }

                    var    type     = assembly.GetType(config.FactoryClient, false);
                    object instance = null;

                    if (type != null)
                    {
                        instance = Activator.CreateInstance(type);
                    }

                    BaseCache.Set <object>(config.ProviderName, instance);
                    return(instance as DbProviderFactory);
                }
            }
            catch (Exception ex)
            {
                BaseLog.SaveLog(ex.Message + ex.StackTrace, "GetFactory");
                return(null);
            }
        }
コード例 #27
0
        public async Task <IResponseOutput> GetVerifyCodeAsync(string lastKey)
        {
            var img = VerifyCodeHelper.GetBase64String(out string code);

            //删除上次缓存的验证码
            if (lastKey.NotNull())
            {
                await BaseCache.DelAsync(lastKey);
            }

            //写入Redis
            var guid = Guid.NewGuid().ToString("N");
            var key  = string.Format(CacheKey.VerifyCodeKey, guid);
            await BaseCache.SetAsync(key, code, TimeSpan.FromMinutes(5));

            var data = new { Key = guid, Img = img };

            return(ResponseOutput.Ok(data));
        }
コード例 #28
0
        public object GetContentItemValue(string columnName)
        {
            if (row == null)
            {
                if (string.IsNullOrEmpty(LanguageCode))
                {
                    LanguageCode = AgilityContext.LanguageCode;
                }

                AgilityContent content = BaseCache.GetContent(ContentReferenceName, LanguageCode, AgilityContext.WebsiteName);
                row = content.GetItemByContentID(ContentID);
            }

            if (row != null && row.Table.Columns.Contains(columnName))
            {
                return(row[columnName]);
            }

            return(null);
        }
コード例 #29
0
        /// <summary>
        /// 请求过滤器
        /// </summary>
        /// <param name="filterContext"></param>
        public override void OnActionExecuting(ActionExecutingContext filterContext)
        {
            base.OnActionExecuting(filterContext);

            var controller = filterContext.Controller as Controller;

            #region model验证处理
            if (!controller.ModelState.IsValid)
            {
                var item  = controller.ViewData.ModelState.Values.ToList().Find(a => a.Errors.Count > 0);
                var error = item.Errors.Where(a => !string.IsNullOrEmpty(a.ErrorMessage)).Take(1).SingleOrDefault().ErrorMessage;
                filterContext.Result = new JsonResult(new { success = false, msg = error });
                return;
            }
            #endregion

            foreach (var item in controller.ControllerContext.ActionDescriptor.FilterDescriptors.ToList())
            {
                if (item.Filter is AllowAnonymousFilter)
                {
                    return;
                }
            }

            #region 登陆验证
            if (!BaseCache.Exists(App.Cache.UserInfo))
            {
                filterContext.Result = new RedirectToActionResult("login", "Home", "default");
                return;
            }
            else
            {
                var dic = BaseCache.Get <Dictionary <string, object> >(App.Cache.UserInfo);
                if (dic.GetValue("ip").ToStr() != App.Ip.Get(filterContext.HttpContext))
                {
                    filterContext.Result = new RedirectToActionResult("login", "Home", "default");
                }
            }
            #endregion
        }
コード例 #30
0
        /// <summary>
        /// 泛型缓存属性成员
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="key"></param>
        /// <returns></returns>
        public static List <PropertyInfo> GetPropertyInfo <T>(bool IsCache = true)
        {
            var key = string.Format("{0}.{1}", typeof(T).Namespace, typeof(T).Name);

            if (IsCache)
            {
                if (BaseCache.Exists(key))
                {
                    return(BaseCache.Get <List <PropertyInfo> >(key));
                }
                else
                {
                    var info = typeof(T).GetProperties(BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly).ToList();
                    BaseCache.Set <List <PropertyInfo> >(key, info);
                    return(info);
                }
            }
            else
            {
                BaseCache.Remove(key);
                return(typeof(T).GetProperties(BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly).ToList());
            }
        }