我想(可能通过应用程序/网络配置)在运行时更改我的 ServiceStack 应用程序中使用的缓存客户端。
例如,我目前有这个:
container.Register<ICacheClient>(new MemoryCacheClient());
我想在运行时将其更改为 Redis ICacheClient 用法。如果我注册了两个容器(一个内存和 Redis)怎么办。是否可以在运行时在我的服务中通过这样的调用在容器之间切换:
public object Get(FooRequest request)
{
string cacheKey = UrnId.CreateWithParts("Foo", "Bar");
return RequestContext.ToOptimizedResultUsingCache(base.Cache, cacheKey, sCacheDuration, () =>
{
return TestRepository.Foos;
});
}
编辑:
请注意,经过更多研究,如果您注册了多个 ICacheClient:
container.Register<IRedisClientsManager>(c => new PooledRedisClientManager("localhost:6379"));
container.Register(c => c.Resolve<IRedisClientsManager>().GetCacheClient());
container.Register<ICacheClient>(new MemoryCacheClient());
然后在您的服务中访问 base.Cache 将返回最近注册的 ICacheClient... 即:在上述情况下,MemoryCacheClient。
因此,通过从服务中访问 Cache 对象的能力,我只需要一种从我注册的缓存中获取特定缓存的方法,我看不到它的任何属性。