実行時に ServiceStack アプリケーションで使用されるキャッシュ クライアントを (おそらくアプリ/Web 構成を通じて) 変更したいと思います。
たとえば、私は現在これを持っています:
container.Register<ICacheClient>(new MemoryCacheClient());
実行時にこれを Redis ICacheClient の使用法に変更したいと思います。2 つのコンテナー (1 つのメモリと 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 オブジェクトにアクセスできるので、登録したキャッシュから特定の Cache を取得する方法が必要になりますが、プロパティが表示されません。