Ich würde empfehlen, die als Singleton registrieren.
Um die als Singleton in Unity zu registrieren, würden Sie eine ContainerControlledLifetimeManager
, z.
var connectionFactory = new ConnectionFactory
{
// Configure the connection factory
};
unityContainer.RegisterInstance(connectionFactory);
unityContainer.RegisterType<IConnection, AutorecoveringConnection>(new ContainerControlledLifetimeManager(),
new InjectionMethod("init"));
Das AutorecoveringConnection
Beispiel einmal zum ersten Mal bleibt aufgelöst am Leben, bis der Besitz UnityContainer
angeordnet ist.
Da wir die ConnectionFactory
mit Unity
registriert haben, wird diese automatisch in den Konstruktor AutorecoveringConnection
eingefügt. Die InjectionMethod
stellt sicher, dass beim ersten Auflösen des AutorecoveringConnection
die Methode init
aufgerufen wird.
Wie für Ihre Frage darüber, 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 erhalten möchten, haben Sie eine Schnittstelle IUpdateSource
mit einer konkreten Implementierung für RabbitMQ. Du kannst 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).
danke das ist großartig! –