using Microsoft.Azure.Cosmos; using Microsoft.Azure.Cosmos.Fluent; using System; using System.Collections.Generic; using System.Text; namespace TEAMModelOS.SDK.Module.AzureCosmosDBV3 { public class CosmosDBV3ClientSingleton { private static string _connectionUrl; private static string _connectionKey; private static CosmosSerializer _cosmosSerializer; private CosmosClient CosmosClient; private CosmosDBV3ClientSingleton() { } public CosmosClient GetCosmosDBClient() { if (CosmosClient != null) { return CosmosClient; } else { getInstance(_connectionUrl, _connectionKey, _cosmosSerializer); return CosmosClient; } } public static CosmosDBV3ClientSingleton getInstance(string connectionUrl, string connectionKey, CosmosSerializer cosmosSerializer) { _connectionUrl = connectionUrl; _connectionKey = connectionKey; _cosmosSerializer = cosmosSerializer; if (cosmosSerializer != null && cosmosSerializer.GetType() == typeof(SystemTextJsonCosmosSerializer)) { return SingletonCustomInstance.instance; } return SingletonInstance.instance; } private static class SingletonInstance { public static CosmosDBV3ClientSingleton instance = new CosmosDBV3ClientSingleton() { // CosmosClient =new CosmosClient(_connectionUrl, _connectionKey, new CosmosClientOptions() { AllowBulkExecution = true } ) CosmosClient = new CosmosClientBuilder(_connectionUrl, _connectionKey). WithBulkExecution(true).WithConnectionModeDirect() //WithConnectionModeDirect(). .Build() //CosmosClient = new CosmosClient(_connectionUrl, _connectionKey) }; //private static readonly ConnectionPolicy ConnectionPolicy = new ConnectionPolicy //{ // ConnectionMode = ConnectionMode.Direct, // ConnectionProtocol = Protocol.Tcp //}; } private static class SingletonCustomInstance { public static CosmosDBV3ClientSingleton instance = new CosmosDBV3ClientSingleton() { // CosmosClient =new CosmosClient(_connectionUrl, _connectionKey, new CosmosClientOptions() { AllowBulkExecution = true } ) CosmosClient = new CosmosClientBuilder(_connectionUrl, _connectionKey). WithBulkExecution(true).WithConnectionModeDirect(). //WithConnectionModeDirect(). WithCustomSerializer(_cosmosSerializer).WithThrottlingRetryOptions(TimeSpan.FromSeconds(60),50) .Build() //CosmosClient = new CosmosClient(_connectionUrl, _connectionKey) }; //private static readonly ConnectionPolicy ConnectionPolicy = new ConnectionPolicy //{ // ConnectionMode = ConnectionMode.Direct, // ConnectionProtocol = Protocol.Tcp //}; } } }