CosmosDBV3ClientSingleton.cs 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. using Microsoft.Azure.Cosmos;
  2. using Microsoft.Azure.Cosmos.Fluent;
  3. using System;
  4. using System.Collections.Generic;
  5. using System.Text;
  6. namespace TEAMModelOS.SDK.Module.AzureCosmosDBV3
  7. {
  8. public class CosmosDBV3ClientSingleton
  9. {
  10. private static string _connectionUrl;
  11. private static string _connectionKey;
  12. private static CosmosSerializer _cosmosSerializer;
  13. private CosmosClient CosmosClient;
  14. private CosmosDBV3ClientSingleton() { }
  15. public CosmosClient GetCosmosDBClient()
  16. {
  17. if (CosmosClient != null)
  18. {
  19. return CosmosClient;
  20. }
  21. else
  22. {
  23. getInstance(_connectionUrl, _connectionKey, _cosmosSerializer);
  24. return CosmosClient;
  25. }
  26. }
  27. public static CosmosDBV3ClientSingleton getInstance(string connectionUrl, string connectionKey, CosmosSerializer cosmosSerializer)
  28. {
  29. _connectionUrl = connectionUrl;
  30. _connectionKey = connectionKey;
  31. _cosmosSerializer = cosmosSerializer;
  32. if (cosmosSerializer != null && cosmosSerializer.GetType() == typeof(SystemTextJsonCosmosSerializer))
  33. {
  34. return SingletonCustomInstance.instance;
  35. }
  36. return SingletonInstance.instance;
  37. }
  38. private static class SingletonInstance
  39. {
  40. public static CosmosDBV3ClientSingleton instance = new CosmosDBV3ClientSingleton()
  41. {
  42. // CosmosClient =new CosmosClient(_connectionUrl, _connectionKey, new CosmosClientOptions() { AllowBulkExecution = true } )
  43. CosmosClient = new CosmosClientBuilder(_connectionUrl, _connectionKey).
  44. WithBulkExecution(true).WithConnectionModeDirect()
  45. //WithConnectionModeDirect().
  46. .Build()
  47. //CosmosClient = new CosmosClient(_connectionUrl, _connectionKey)
  48. };
  49. //private static readonly ConnectionPolicy ConnectionPolicy = new ConnectionPolicy
  50. //{
  51. // ConnectionMode = ConnectionMode.Direct,
  52. // ConnectionProtocol = Protocol.Tcp
  53. //};
  54. }
  55. private static class SingletonCustomInstance
  56. {
  57. public static CosmosDBV3ClientSingleton instance = new CosmosDBV3ClientSingleton()
  58. {
  59. // CosmosClient =new CosmosClient(_connectionUrl, _connectionKey, new CosmosClientOptions() { AllowBulkExecution = true } )
  60. CosmosClient = new CosmosClientBuilder(_connectionUrl, _connectionKey).
  61. WithBulkExecution(true).WithConnectionModeDirect().
  62. //WithConnectionModeDirect().
  63. WithCustomSerializer(_cosmosSerializer).WithThrottlingRetryOptions(TimeSpan.FromSeconds(60),50)
  64. .Build()
  65. //CosmosClient = new CosmosClient(_connectionUrl, _connectionKey)
  66. };
  67. //private static readonly ConnectionPolicy ConnectionPolicy = new ConnectionPolicy
  68. //{
  69. // ConnectionMode = ConnectionMode.Direct,
  70. // ConnectionProtocol = Protocol.Tcp
  71. //};
  72. }
  73. }
  74. }