【发布时间】:2012-11-01 16:23:50
【问题描述】:
我正在尝试为我正在编写的一对 Windows 服务设置 RabbitMQ,以便以快速可靠的方式促进它们之间的通信。但是,我在尝试设置主要的 Windows 服务引擎时遇到了问题,这些引擎需要建立与 RabbitMQ 服务器的连接才能完成它们的工作。
基本上,RabbitMQ 的 .NET 客户端中的ConnectionFactory 对象不是抽象的,也没有实现任何接口。我看不到使用像 StructureMap 这样的 IoC 容器来注入此类的明显方法。甚至文档中的代码示例也只是公然显示newing,就像这样:
ConnectionFactory factory = new ConnectionFactory();
factory.Uri = "amqp://user:pass@hostName:port/vhost";
IConnection conn = factory.CreateConnection();
向我展示的解决方案是将整个工厂推到服务的主要 OnStart 和 OnStop 函数中,这真的很难测试,而且无论如何也没有太大的兴趣。但是,这给我留下了一个单一的IConnection 用于服务,所以如果该连接以任何方式断开,服务将无法恢复并且必须简单地退出。如果主引擎可以看到工厂,它可以简单地产生一个新的连接并继续。但是除非我注入它,否则如果不连接到现有服务器就无法测试主引擎!
这里有什么我遗漏的吗?我不考虑的任何其他选择?我该如何注入这个工厂,如果我不能,我如何限制损失?
编辑:另外,作为事后的想法,如果有人对主要开发团队对类似更改的接受程度有很好的了解,我很高兴对 RabbitMQ 的 .NET 客户端进行更改以在此实现一个接口这。我很乐意做出贡献,但我最不想做的事情是让我的程序在一些自定义版本的 RabbitMQ 上运行,从而首先消除使用第三方库的主要好处。
【问题讨论】:
标签: c# .net dependency-injection rabbitmq