diff --git a/src/0-core/HuanMeng.MiaoYu.Code/Base/MiaoYuBase.cs b/src/0-core/HuanMeng.MiaoYu.Code/Base/MiaoYuBase.cs
index e28f5c6..9933ff5 100644
--- a/src/0-core/HuanMeng.MiaoYu.Code/Base/MiaoYuBase.cs
+++ b/src/0-core/HuanMeng.MiaoYu.Code/Base/MiaoYuBase.cs
@@ -6,6 +6,7 @@ using HuanMeng.DotNetCore.JwtInfrastructure.Interface;
using HuanMeng.DotNetCore.MultiTenant;
using HuanMeng.DotNetCore.MultiTenant.Contract;
using HuanMeng.MiaoYu.Code.Cache;
+using HuanMeng.MiaoYu.Code.Cache.Contract;
using HuanMeng.MiaoYu.Code.DataAccess;
using HuanMeng.MiaoYu.Code.TencentUtile;
@@ -31,7 +32,7 @@ namespace HuanMeng.MiaoYu.Code.Base
///
/// BLL父类
///
- public class MiaoYuBase : BLLBase
+ public class MiaoYuBase : CacheBase//BLLBase
{
public MiaoYuBase(IServiceProvider serviceProvider) : base(serviceProvider)
@@ -259,7 +260,7 @@ namespace HuanMeng.MiaoYu.Code.Base
if (_miaoYuCache == null)
{
//new MiaoYuDataEntityCache(Dao).DataList
- _miaoYuCache = new MiaoYuCache(Dao, Mapper);
+ _miaoYuCache = new MiaoYuCache(this);
}
return _miaoYuCache;
}
diff --git a/src/0-core/HuanMeng.MiaoYu.Code/Cache/Contract/CacheBase.cs b/src/0-core/HuanMeng.MiaoYu.Code/Cache/Contract/CacheBase.cs
new file mode 100644
index 0000000..22bb9d0
--- /dev/null
+++ b/src/0-core/HuanMeng.MiaoYu.Code/Cache/Contract/CacheBase.cs
@@ -0,0 +1,63 @@
+using AutoMapper;
+
+using HuanMeng.DotNetCore.Base;
+
+using Microsoft.Extensions.DependencyInjection;
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace HuanMeng.MiaoYu.Code.Cache.Contract
+{
+ ///
+ ///
+ ///
+ public class CacheBase : BLLBase
+ {
+ public CacheBase(IServiceProvider serviceProvider) : base(serviceProvider)
+ {
+ }
+
+ #region 数据库
+ private DAO _dao;
+ ///
+ /// dao 数据库
+ ///
+ public override DAO Dao
+ {
+ get
+ {
+ if (_dao == null)
+ {
+ _dao = new DAO(_serviceProvider);
+ }
+ return _dao;
+ }
+ }
+ #endregion
+
+ #region 映射
+ private IMapper _mapper;
+
+ ///
+ /// dto映射
+ ///
+ //[FromServices]
+ public virtual IMapper Mapper
+ {
+ get
+ {
+ if (_mapper == null)
+ {
+ _mapper = _serviceProvider.GetRequiredService();
+ }
+ return _mapper;
+ }
+ set { _mapper = value; }
+ }
+ #endregion
+ }
+}
diff --git a/src/0-core/HuanMeng.MiaoYu.Code/Cache/MiaoYuCache.cs b/src/0-core/HuanMeng.MiaoYu.Code/Cache/MiaoYuCache.cs
index ca08d7c..ffead2d 100644
--- a/src/0-core/HuanMeng.MiaoYu.Code/Cache/MiaoYuCache.cs
+++ b/src/0-core/HuanMeng.MiaoYu.Code/Cache/MiaoYuCache.cs
@@ -15,7 +15,7 @@ namespace HuanMeng.MiaoYu.Code.Cache
/// 缓存类
///
///
- public partial class MiaoYuCache(DAO dao, IMapper mapper)
+ public partial class MiaoYuCache(CacheBase cacheBase)
{
#region 角色缓存表
@@ -33,7 +33,7 @@ namespace HuanMeng.MiaoYu.Code.Cache
if (Character == null)
{
//Character = new MiaoYuDataEntityCache(dao, MiaoYuCacheExtend.CharacterLock);
- Character = MiaoYuCacheExtend.GetMiaoYuDataEntityCache(dao);
+ Character = MiaoYuCacheExtend.GetMiaoYuDataEntityCache(cacheBase);
}
return Character.DataList ?? new List();
}
@@ -57,8 +57,7 @@ namespace HuanMeng.MiaoYu.Code.Cache
{
if (ModelConfig == null)
{
- //ModelConfig = new MiaoYuDataEntityCache(dao, MiaoYuCacheExtend.ModelConfigLock);
- ModelConfig = MiaoYuCacheExtend.GetMiaoYuDataEntityCache(dao);
+ ModelConfig = MiaoYuCacheExtend.GetMiaoYuDataEntityCache(cacheBase);
}
return ModelConfig.DataList ?? new List();
}
@@ -70,7 +69,7 @@ namespace HuanMeng.MiaoYu.Code.Cache
///
/// 角色缓存表
///
- public CharacterEntityCache? CharacterCache { get; set; }
+ public CommonDataEntityCache? CharacterCache { get; set; }
///
/// 角色
///
@@ -80,8 +79,8 @@ namespace HuanMeng.MiaoYu.Code.Cache
{
if (CharacterCache == null)
{
-
- CharacterCache = new CharacterEntityCache(dao, mapper);
+ CharacterCache = MiaoYuCacheExtend.GetMiaoYuDataEntityCache(cacheBase);
+ //CharacterCache = new CharacterEntityCache(cacheBase);
}
return CharacterCache.DataList ?? new List();
}
@@ -105,7 +104,7 @@ namespace HuanMeng.MiaoYu.Code.Cache
if (ImageConfigCache == null)
{
//ImageConfigCache = new MiaoYuDataEntityCache(dao, MiaoYuCacheExtend.ImageConfigLock);
- ImageConfigCache = MiaoYuCacheExtend.GetMiaoYuDataEntityCache(dao);
+ ImageConfigCache = MiaoYuCacheExtend.GetMiaoYuDataEntityCache(cacheBase);
}
return ImageConfigCache.DataList ?? new List();
}
@@ -131,7 +130,7 @@ namespace HuanMeng.MiaoYu.Code.Cache
if (CharacterTypeCache == null)
{
//CharacterTypeCache = new MiaoYuDataEntityCache(dao, MiaoYuCacheExtend.CharacterTypeLock);
- CharacterTypeCache = MiaoYuCacheExtend.GetMiaoYuDataEntityCache(dao);
+ CharacterTypeCache = MiaoYuCacheExtend.GetMiaoYuDataEntityCache(cacheBase);
}
return CharacterTypeCache.DataList ?? new List();
}
@@ -156,7 +155,7 @@ namespace HuanMeng.MiaoYu.Code.Cache
if (CharacterTypeIntimacyCache == null)
{
//CharacterTypeIntimacyCache = new MiaoYuDataEntityCache(dao, MiaoYuCacheExtend.CharacterTypeIntimacyLock);
- CharacterTypeIntimacyCache = MiaoYuCacheExtend.GetMiaoYuDataEntityCache(dao);
+ CharacterTypeIntimacyCache = MiaoYuCacheExtend.GetMiaoYuDataEntityCache(cacheBase);
}
return CharacterTypeIntimacyCache.DataList ?? new List();
}
@@ -205,7 +204,13 @@ namespace HuanMeng.MiaoYu.Code.Cache
{ typeof(T_Image_Config), ImageConfigLock },
{ typeof(T_Character_Type), CharacterTypeLock },
{ typeof(T_Character_Type_Intimacy), CharacterTypeIntimacyLock },
-
+ };
+ ///
+ /// 特殊的缓存锁对象
+ ///
+ public static Dictionary SpecialCacheLockList { get; set; } = new Dictionary
+ {
+ { typeof(CharacterCache), CharacterLock },
};
#endregion
@@ -214,29 +219,35 @@ namespace HuanMeng.MiaoYu.Code.Cache
/// 获取对应的缓存
///
///
- ///
+ ///
///
- public static CommonDataEntityCache GetMiaoYuDataEntityCache(DAO dao) where T : class
+ public static CommonDataEntityCache GetMiaoYuDataEntityCache(CacheBase cacheBase) where T : class
{
object cacheLock;
- if (!CacheLockList.TryGetValue(typeof(T), out cacheLock))
+ var typeo = typeof(T);
+ if (SpecialCacheLockList.TryGetValue(typeo, out cacheLock))
{
- Console.WriteLine("没有找到锁对象==>" + typeof(T).Name);
+ var o = new CharacterEntityCache(cacheBase, cacheLock) as CommonDataEntityCache;
+ return o;
+ }
+ if (!CacheLockList.TryGetValue(typeo, out cacheLock))
+ {
+ Console.WriteLine("没有找到锁对象==>" + typeo.Name);
// 创建一个新的锁对象,并添加到 CacheLockList 中
cacheLock = new object();
- CacheLockList[typeof(T)] = cacheLock;
+ CacheLockList[typeo] = cacheLock;
}
- return new MiaoYuDataEntityCache(dao, cacheLock);
+ return new MiaoYuDataEntityCache(cacheBase, cacheLock);
}
///
/// 获取缓存数据
///
///
- ///
+ ///
///
- public static List GetMiaoYuDataEntityCacheList(DAO dao) where T : class
+ public static List GetMiaoYuDataEntityCacheList(CacheBase cacheBase) where T : class
{
- var cache = GetMiaoYuDataEntityCache(dao);
+ var cache = GetMiaoYuDataEntityCache(cacheBase);
return cache?.DataList ?? new List();
}
@@ -244,21 +255,44 @@ namespace HuanMeng.MiaoYu.Code.Cache
/// 清除全部缓存
///
///
- public static void ClareMiaoYuDataEntityCache(DAO dao)
+ public static void ClareMiaoYuDataEntityCache(CacheBase cacheBase)
{
foreach (var item in CacheLockList)
{
var t = item.Key;
Type cacheType = typeof(MiaoYuDataEntityCache<>).MakeGenericType(t);
- var shujuduixiang = Activator.CreateInstance(cacheType, dao, item.Value,36000);
+ var shujuduixiang = Activator.CreateInstance(cacheType, cacheBase, item.Value, 36000);
var x = shujuduixiang as ICacheClearData;
if (x != null)
{
x.ClearData();
}
- //new MiaoYuDataEntityCache(dao, cacheLock);
- //Activator.CreateInstance(t);
}
+ var obj = SpecialCacheLockList[typeof(CharacterEntityCache)];
+ CharacterEntityCache characterEntityCache = new CharacterEntityCache(cacheBase, obj);
+ characterEntityCache.ClearData();
+ }
+
+ ///
+ /// 刷新部缓存
+ ///
+ ///
+ public static void ReloadMiaoYuDataEntityCache(CacheBase cacheBase)
+ {
+ foreach (var item in CacheLockList)
+ {
+ var t = item.Key;
+ Type cacheType = typeof(MiaoYuDataEntityCache<>).MakeGenericType(t);
+ var shujuduixiang = Activator.CreateInstance(cacheType, cacheBase, item.Value, 36000);
+ var x = shujuduixiang as ICacheReloadData;
+ if (x != null)
+ {
+ x.ReloadData();
+ }
+ }
+ var obj = SpecialCacheLockList[typeof(CharacterEntityCache)];
+ CharacterEntityCache characterEntityCache = new CharacterEntityCache(cacheBase, obj);
+ characterEntityCache.ReloadData();
}
#endregion
@@ -288,13 +322,13 @@ namespace HuanMeng.MiaoYu.Code.Cache
///
///
///
- public static string GetImageUrl(this int imageId, DAO dao)
+ public static string GetImageUrl(this int imageId, CacheBase cacheBase)
{
- if (imageId == 0 || dao == null)
+ if (imageId == 0 || cacheBase == null)
{
return "";
}
- MiaoYuCache miaoYuCache = new MiaoYuCache(dao, null);
+ MiaoYuCache miaoYuCache = new MiaoYuCache(cacheBase);
return GetImageUrl(imageId, miaoYuCache);
}
diff --git a/src/0-core/HuanMeng.MiaoYu.Code/Cache/MiaoYuDataEntityCache.cs b/src/0-core/HuanMeng.MiaoYu.Code/Cache/MiaoYuDataEntityCache.cs
index 695cdf7..faf8e4c 100644
--- a/src/0-core/HuanMeng.MiaoYu.Code/Cache/MiaoYuDataEntityCache.cs
+++ b/src/0-core/HuanMeng.MiaoYu.Code/Cache/MiaoYuDataEntityCache.cs
@@ -1,5 +1,6 @@
+using HuanMeng.MiaoYu.Code.Cache.Contract;
using HuanMeng.MiaoYu.Code.DataAccess;
using Microsoft.EntityFrameworkCore;
@@ -9,9 +10,10 @@ namespace HuanMeng.MiaoYu.Code.Cache
///
/// 妙语数据库实体类缓存
///
- public class MiaoYuDataEntityCache(DAO _dao, object lockObj, int cacheTime = 36000)
+ public class MiaoYuDataEntityCache(CacheBase cacheBase, object lockObj, int cacheTime = 36000)
: CommonDataEntityCache(lockObj, cacheTime) where T : class
{
+ public DataAccess.DAO _dao = cacheBase.Dao;
///
/// 缓存的key
///
@@ -28,7 +30,7 @@ namespace HuanMeng.MiaoYu.Code.Cache
///
public override List GetDataList()
{
-
+
var dbSet = _dao.daoDbMiaoYu.context.Set().AsNoTracking();
if (dbSet == null)
{
diff --git a/src/0-core/HuanMeng.MiaoYu.Code/Cache/Special/CharacterEntityCache.cs b/src/0-core/HuanMeng.MiaoYu.Code/Cache/Special/CharacterEntityCache.cs
index b987781..422bce0 100644
--- a/src/0-core/HuanMeng.MiaoYu.Code/Cache/Special/CharacterEntityCache.cs
+++ b/src/0-core/HuanMeng.MiaoYu.Code/Cache/Special/CharacterEntityCache.cs
@@ -1,4 +1,6 @@
using AutoMapper;
+
+using HuanMeng.MiaoYu.Code.Cache.Contract;
using HuanMeng.MiaoYu.Model.Dto;
using HuanMeng.MiaoYu.Model.Dto.Character;
using HuanMeng.MiaoYu.Model.Dto.Label;
@@ -12,12 +14,13 @@ namespace HuanMeng.MiaoYu.Code.Cache.Special
///
///
///
- public class CharacterEntityCache(DAO _dao, IMapper mapper) : MiaoYuDataEntityCache(_dao, CharacterCacheLock)
+ public class CharacterEntityCache(CacheBase cacheBase, object CharacterCacheLock) : MiaoYuDataEntityCache(cacheBase, CharacterCacheLock)
{
///
/// 锁
///
private static object CharacterCacheLock = new object();
+ private IMapper mapper = cacheBase.Mapper;
///
/// 获取缓存数据
@@ -27,7 +30,7 @@ namespace HuanMeng.MiaoYu.Code.Cache.Special
{
List characterCaches = new List();
//读取角色表
- var characters = _dao.daoDbMiaoYu.context.T_Character.Where(it=>it.Visibility).ToList();
+ var characters = _dao.daoDbMiaoYu.context.T_Character.Where(it => it.Visibility).ToList();
if (characters == null)
{
return characterCaches;
@@ -39,24 +42,28 @@ namespace HuanMeng.MiaoYu.Code.Cache.Special
//查询配置表
var modelConfigs = _dao.daoDbMiaoYu.context.T_Model_Config.ToList();
//图片
- var images = MiaoYuCacheExtend.GetMiaoYuDataEntityCacheList(_dao);
+ var images = MiaoYuCacheExtend.GetMiaoYuDataEntityCacheList(cacheBase);
//标签
- var labels = MiaoYuCacheExtend.GetMiaoYuDataEntityCacheList(_dao);
+ var labels = MiaoYuCacheExtend.GetMiaoYuDataEntityCacheList(cacheBase);
//标签关联表
- var labelRelations = MiaoYuCacheExtend.GetMiaoYuDataEntityCacheList(_dao);
+ var labelRelations = MiaoYuCacheExtend.GetMiaoYuDataEntityCacheList(cacheBase);
//性格
- var personalitys = MiaoYuCacheExtend.GetMiaoYuDataEntityCacheList(_dao);
+ var personalitys = MiaoYuCacheExtend.GetMiaoYuDataEntityCacheList(cacheBase);
//性格关联表
- var personalityRelations = MiaoYuCacheExtend.GetMiaoYuDataEntityCacheList(_dao);
+ var personalityRelations = MiaoYuCacheExtend.GetMiaoYuDataEntityCacheList(cacheBase);
//分类
- var types = MiaoYuCacheExtend.GetMiaoYuDataEntityCacheList(_dao); ;
+ var types = MiaoYuCacheExtend.GetMiaoYuDataEntityCacheList(cacheBase); ;
//分类关联表
- var typesRelations = MiaoYuCacheExtend.GetMiaoYuDataEntityCacheList(_dao); ;
+ var typesRelations = MiaoYuCacheExtend.GetMiaoYuDataEntityCacheList(cacheBase); ;
foreach (var characterCache in characterCaches)
{
var modelConfig = modelConfigs.FirstOrDefault(it => it.Id == characterCache.ModelConfigId);
+ if (modelConfig==null)
+ {
+ modelConfig= modelConfigs.FirstOrDefault();
+ }
if (modelConfig != null)
{
characterCache.ModelConfig = modelConfig;
diff --git a/src/0-core/HuanMeng.MiaoYu.Code/Other/OtherBLL.cs b/src/0-core/HuanMeng.MiaoYu.Code/Other/OtherBLL.cs
index cbb8b7c..5bfd112 100644
--- a/src/0-core/HuanMeng.MiaoYu.Code/Other/OtherBLL.cs
+++ b/src/0-core/HuanMeng.MiaoYu.Code/Other/OtherBLL.cs
@@ -20,7 +20,17 @@ namespace HuanMeng.MiaoYu.Code.Other
///
public Task CleraCache()
{
- MiaoYuCacheExtend.ClareMiaoYuDataEntityCache(Dao);
+ MiaoYuCacheExtend.ClareMiaoYuDataEntityCache(this);
+ return Task.CompletedTask;
+ }
+
+ ///
+ /// 刷新缓存
+ ///
+ ///
+ public Task ReloadCache()
+ {
+ MiaoYuCacheExtend.ReloadMiaoYuDataEntityCache(this);
return Task.CompletedTask;
}
}