Ich verwende Unity App Block als meinen IOC-Container für meine Service-Schicht eines WCF-Projekts. Das funktioniert recht gut mit der Unity.WCF-Bibliothek, um es in jeden WCF-Dienst zu stecken.
Ich habe RabbitMQ kürzlich in meine Service-Schicht eingeführt und verwende derzeit die "using" -Blöcke, um eine Verbindung zur Warteschlange herzustellen. Ich mag das aber nicht und versuche, mit HierachicalLifetimeManager
meine Verbindung zu RabbitMQ zu erstellen und zu zerstören, so wie ich sie brauche? Klingt das richtig?
Ich suche nach einer Probe oder zumindest nach einer Anleitung zum besten Ansatz? (z. B. sollte ich die Verbindung kapseln und injizieren in jeden Dienst wie benötigt? Wie würde ich RabbitMQ-Consumer usw. verkapseln?)
Ich würde empfehlen, die IConnection
als Singleton zu registrieren.
Um die IConnection
als Singleton in Unity zu registrieren, verwenden Sie ContainerControlledLifetimeManager
, z. B.
Die AutorecoveringConnection
-Instanz wird, sobald sie zum ersten Mal aufgelöst wurde, am Leben bleiben, bis die besitzende UnityContainer
entsorgt wird.
Da wir ConnectionFactory
mit Unity
registriert haben, wird dies automatisch in den Konstruktor von AutorecoveringConnection
eingefügt.
Die InjectionMethod
stellt sicher, dass beim ersten Auflösen von AutorecoveringConnection
die Methode init
aufgerufen wird.
Was Ihre Frage betrifft, ob Sie RabbitMQ von Ihren Diensten weg abstrahieren sollten, wäre meine Antwort ja, aber ich würde nicht einfach eine IMessageQueue
Abstraktion erstellen. Denken Sie darüber nach, wofür Sie Ihre Nachrichtenwarteschlange verwenden, um Status zu pushen? Wenn ja, haben Sie eine IStatusNotifier
-Schnittstelle mit einer konkreten Implementierung für RabbitMQ. Wenn Sie Updates abrufen möchten, verwenden Sie eine IUpdateSource
-Schnittstelle mit einer konkreten Implementierung für RabbitMQ. Sie können sehen, wohin ich damit gehe.
Wenn Sie eine Abstraktion für eine Nachrichtenwarteschlange erstellen, beschränken Sie sich auf Funktionen, die nur für alle Message Queue-Implementierungen verfügbar sind. Durch eine unterschiedliche Implementierung von IStatusNotifier
für verschiedene Message Queue - Implementierungen können Sie Funktionen nutzen, die für verschiedene Technologien einzigartig sind, und auch flexibel bleiben, falls in Zukunft völlig andere Technologien verwendet werden (z. B. Schreiben in eine SQL - Datenbank oder Ausgabe an eine Konsole).
Tags und Links .net rabbitmq unity-container