C# 我应该注入ServiceStack';什么是ICacheManager?
我想在我们的应用程序中实现一个缓存层,但无意中遇到了ServiceStack的ICacheManagerC# 我应该注入ServiceStack';什么是ICacheManager?,c#,
servicestack,autofac,C#,
servicestack,Autofac,我想在我们的应用程序中实现一个缓存层,但无意中遇到了ServiceStack的ICacheManager ICacheManager.Resolve看起来似乎正是我想要的(尝试获取,如果它不在缓存中,则调用函数获取并存储它)。然而,我能找到的所有文档都是关于使用ICacheClient的 如何使用AutoFac连接ICacheManager?我想我需要连接一个客户,例如: _builder.Register(c => new MemoryCacheClient()) .As
ICacheManager.Resolve
看起来似乎正是我想要的(尝试获取,如果它不在缓存中,则调用函数获取并存储它)。然而,我能找到的所有文档都是关于使用ICacheClient的
如何使用AutoFac连接ICacheManager?我想我需要连接一个客户,例如:
_builder.Register(c => new MemoryCacheClient())
.As<ICacheClient>();
\u builder.Register(c=>newmemorycacheclient())
.As();
但我不确定ICacheManager应该解决什么问题
这是个好主意还是我滥用了ServiceStack
我暂时添加了一个自定义缓存管理器,但由于某些原因,它感觉不正确:
public class CacheManager : ICacheManager
{
public CacheManager(ICacheClient cacheClient)
{
CacheClient = cacheClient;
}
public void Clear(IEnumerable<string> cacheKeys)
{
Clear(cacheKeys.ToArray());
}
public void Clear(params string[] cacheKeys)
{
CacheClient.ClearCaches(cacheKeys.ToArray());
}
public ICacheClient CacheClient { get; private set; }
public T Resolve<T>(string cacheKey, Func<T> createCacheFn) where T : class
{
return Resolve(cacheKey, new TimeSpan(0, 15, 0), createCacheFn);
}
public T Resolve<T>(string cacheKey, TimeSpan expireIn, Func<T> createCacheFn) where T : class
{
var cacheResult = CacheClient.Get<T>(cacheKey);
if (cacheResult != null)
return cacheResult;
var item = createCacheFn();
CacheClient.Set(cacheKey, item, expireIn);
return item;
}
}
公共类缓存管理器:ICacheManager
{
公共缓存管理器(ICacheClient cacheClient)
{
CacheClient=CacheClient;
}
公共无效清除(IEnumerable CacheKey)
{
清除(cacheKeys.ToArray());
}
公共无效清除(参数字符串[]缓存键)
{
CacheClient.ClearCaches(cacheKeys.ToArray());
}
公共ICacheClient缓存客户端{get;private set;}
公共T解析(字符串cacheKey,Func createCacheFn),其中T:class
{
返回解析(cacheKey,newtimespan(0,15,0),createCacheFn);
}
公共T解析(字符串cacheKey,TimeSpan expireIn,Func createCacheFn),其中T:class
{
var cacheResult=CacheClient.Get(cacheKey);
if(cacheResult!=null)
返回缓存结果;
var item=createCacheFn();
CacheClient.Set(cacheKey,item,expireIn);
退货项目;
}
}
如果您使用的是ServiceStack,还可以使用它的IoC容器,这样您就可以使用其他ServiceStack组件的注册。为什么首先需要CacheManager?根据类型的不同,您会有不同的缓存机制吗?