我有一個web應用程序和一個處理Redis消息的後臺服務。但是,我不確定網絡應用程序的RedisMqServer
應該配置爲單例(我使用Ninject作爲IoC容器)。每個請求將需要發送消息到後臺服務(單向),但我不確定它應該實例化每個請求或每個應用程序。應該爲每個應用程序配置一次RedisMqServer/RedisMqHost?
我在想,容器會這樣配置:
var clientManager = new PooledRedisClientManager();
var mqHost = new RedisMqHost(clientManager);
Bind<IMessageProducer>()
.ToMethod(_ => mqHost.MessageFactory.CreateMessageProducer())
.InRequestScope();
或者,也許RedisMqHost/RedisMqServer
是沒有必要的,當消息是單向的?因此,降低配置:
var clientManager = new PooledRedisClientManager();
Bind<IMessageProducer>()
.ToMethod(_ => new RedisMessageProducer(clientManager))
.InRequestScope();
太棒了 - 你是我希望回答這個問題的確切人物。謝謝! – TheCloudlessSky
也許你在我編輯完問題後回答了,但是你認爲手工創建'RedisMessageProducer'比使用工廠更好嗎?或者沒有關係,因爲這正是MessageFactory所做的(我看了解源代碼)? – TheCloudlessSky
如果可能的話,你應該總是儘量避免綁定到代碼中的具體類型構造函數(所以如果可用的話總是使用工廠)。這也突出了一個錯誤,你應該註冊'IMessageFactory'而不是'IMessageProducer' - 我已經更新了我的回答以反映。 – mythz