Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/apache-kafka/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 我应该注入ServiceStack';什么是ICacheManager?_C#_<img Src="//i.stack.imgur.com/WM7S8.png" Height="16" Width="18" Alt="" Class="sponsor Tag Img">servicestack_Autofac - Fatal编程技术网 servicestack,autofac,C#,servicestack,Autofac" /> servicestack,autofac,C#,servicestack,Autofac" />

C# 我应该注入ServiceStack';什么是ICacheManager?

C# 我应该注入ServiceStack';什么是ICacheManager?,c#,servicestack,autofac,C#,servicestack,Autofac,我想在我们的应用程序中实现一个缓存层,但无意中遇到了ServiceStack的ICacheManager ICacheManager.Resolve看起来似乎正是我想要的(尝试获取,如果它不在缓存中,则调用函数获取并存储它)。然而,我能找到的所有文档都是关于使用ICacheClient的 如何使用AutoFac连接ICacheManager?我想我需要连接一个客户,例如: _builder.Register(c => new MemoryCacheClient()) .As

我想在我们的应用程序中实现一个缓存层,但无意中遇到了ServiceStack的ICacheManager

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?根据类型的不同,您会有不同的缓存机制吗?