我希望在我们的应用程序中实现一个缓存层,但不小心遇到了 ServiceStack 的 ICacheManager。
ICacheManager.Resolve
看起来这正是我所追求的(尝试并获取,如果它不在缓存中,则调用该函数来获取并存储它)。然而,我能找到的所有文档都是关于使用 ICacheClient 的。
如何使用 AutoFac 连接 ICacheManager?我假设我需要连接一个客户端,例如:
_builder.Register(c => new MemoryCacheClient())
.As<ICacheClient>();
但是我不确定 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;
}
}