RabbitMQ: die Injektion der Verbindung Fabrik

Ich bin versuchen, RabbitMQ für ein paar Windows-Dienste, die ich Schreibe, zur Erleichterung der Kommunikation zwischen Ihnen auf eine schnelle und zuverlässige Art und Weise. Allerdings bin ich im laufen in ein problem, wenn die versuchen, die wichtigsten windows-Dienst-Motoren, die brauchen, um verbindungen zu der RabbitMQ-server Ihr Ding machen.

Grundsätzlich die ConnectionFactory Objekt in RabbitMQ ist .NET-client ist nicht Abstrakt und implementiert keine Schnittstelle. Ich kann nicht sehen, eine offensichtliche Weg, um zu injizieren, diese Klasse mit einem IoC-container wie StructureMap. Auch die code-Beispiele in der Dokumentation zeigen nur krass newing it up, etwa so:

 ConnectionFactory factory = new ConnectionFactory();
 factory.Uri = "amqp://user:pass@hostName:port/vhost";
 IConnection conn = factory.CreateConnection();

Die Lösung, die sich mir stellt ist, schieben Sie die ganze Fabrik in den Dienst der Haupt - OnStart und OnStop Funktionen, die wirklich schwierig zu testen, und nicht von großem Interesse sowieso. Jedoch, lässt mich mit einem einzigen IConnection für den service, also, wenn eine Verbindung unterbrochen wird, in irgendeiner Weise hat der Dienst keine Möglichkeit, sich zu erholen und muss einfach beenden. Wenn die Hauptmaschine hatte Sicht auf die Fabrik, es könnte einfach produzieren ein neuer Anschluss und weiter. Aber wenn ich Spritzen, dass es keine Möglichkeit zum testen der Hauptmaschine, ohne eine Verbindung zu einem vorhandenen server!

Gibt es irgendetwas, was ich hier vermisst? Eine andere option bin ich nicht in Betracht? Wie kann ich mich über die Injektion dieser Fabrik, und wenn ich nicht kann, wie kann ich den Schaden begrenzen?

EDIT: Auch, im Nachhinein, bin ich vollkommen glücklich zu machen, eine Veränderung zu RabbitMQ ist .NET-client eine Schnittstelle implementieren, wenn jemand eine gute Idee hat, wie empfänglich der Haupt-dev-team wäre, um eine änderung wie diese. Ich würde gerne dazu beitragen, aber das Letzte, was ich will zu tun ist, haben meine Programme funktioniert auf einigen custom-version von RabbitMQ, wodurch der Hauptvorteil der Verwendung einer Drittanbieter-Bibliothek in den ersten Platz.

InformationsquelleAutor tmesser | 2012-11-01
Schreibe einen Kommentar