我有一个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