2012-09-29 32 views
3

我有一個ASP.NET MVC應用程序,我剛開始使用ServiceStack的Redis客戶端。我使用Ninject作爲我的IoC容器。目前我的綁定是這樣的:ServiceStack的IRedisClientManager + Ninject - 使用InSingletonScope?

Bind<IRedisClientsManager>() 
    .ToMethod(c => new BasicRedisClientManager("localhost:6379")) 
    .InSingletonScope(); 

Bind<ICacheClient>().ToMethod(c => c.Kernel.Get<IRedisClientsManager>().GetCacheClient()); 
Bind<IRedisClient>().ToMethod(c => c.Kernel.Get<IRedisClientsManager>().GetClient()); 

我有效地創建BasicRedisClientManager的一個單一實例在應用程序啓動時使用的一個ICacheClient或IRedisClient的任何請求實例。我在這裏做了什麼正確的典型用例?提前致謝!

回答

5

是兩個BasicRedisClientManagerPooledRedisClientManager均爲線程並設計成用作單。 2之間的區別是,BasicRedisClientManager返回每次創建一個新的連接,而PooledRedisClientManager維護一個開放的Redis連接池。

+0

謝謝!我現在正在重新考慮上面的其他綁定。具體來說,IRedisClient被注入到掛起的控制器中,直到gc通過。這類似於保持關鍵資源的開放嗎?讓他們保持短命是重要的(即將他們的創作包裝在使用說明中)? –