using Microsoft.Azure.ServiceBus; using System; using System.Collections.Generic; using System.Text; namespace TEAMModelOS.SDK.Module.AzureServiceBus { public class AzureServiceBusClientSingleton { private ServiceBusModel ServiceBusModel; public static AzureServiceBusOptions azureServiceBusOptions; private AzureServiceBusClientSingleton() { } public ServiceBusModel GetServiceBusClient() { if (ServiceBusModel != null) { return ServiceBusModel; } else { getInstance(azureServiceBusOptions); return ServiceBusModel; } } public static AzureServiceBusClientSingleton getInstance(AzureServiceBusOptions _azureServiceBusOptions) { azureServiceBusOptions= _azureServiceBusOptions; return SingletonInstance.instance; } private static class SingletonInstance { public static AzureServiceBusClientSingleton instance = new AzureServiceBusClientSingleton() { ServiceBusModel = new ServiceBusModel { topClients = GetTopClients(),subClients=GetSubClients() } }; } private static Dictionary GetTopClients() { Dictionary topClients = new Dictionary(); string ConnectionString = azureServiceBusOptions.ConnectionString; azureServiceBusOptions.Topics.ForEach(x=> { topClients.TryAdd(x.Name, new TopClient { topicClient = new TopicClient(ConnectionString, x.Name) }); }); return topClients; } private static Dictionary GetSubClients() { Dictionary subClients = new Dictionary(); string ConnectionString = azureServiceBusOptions.ConnectionString; azureServiceBusOptions.Topics.ForEach(x => { x.Subscribe.ForEach(y => { subClients.TryAdd(y, new SubClient { topName = x.Name, subscriptionClient = new SubscriptionClient(ConnectionString, x.Name, y) }); }); }); return subClients; } } public class ServiceBusModel { public Dictionary topClients { get; set; } = new Dictionary(); public Dictionary subClients { get; set; } = new Dictionary(); } public class TopClient { public ITopicClient topicClient { get; set; } } public class SubClient { public string topName { get; set; } public ISubscriptionClient subscriptionClient { get; set; } } }