我应该注入ServiceStack的ICacheManager吗?

时间:2013-04-17 19:37:14

标签: c# servicestack autofac

我正在寻找在我们的应用程序中实现缓存层,并偶然遇到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;
    }
}

0 个答案:

没有答案