4

我希望在我们的应用程序中实现一个缓存层,但不小心遇到了 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;
    }
}
4

0 回答 0