/// <summary> /// Initializes a new instance of the <see cref="CosmosDbPartitionedStorage"/> class. /// using the provided CosmosDB credentials, database ID, and container ID. /// </summary> /// <param name="cosmosDbStorageOptions">Cosmos DB partitioned storage configuration options.</param> public CosmosDbPartitionedStorage(CosmosDbPartitionedStorageOptions cosmosDbStorageOptions) { if (cosmosDbStorageOptions == null) { throw new ArgumentNullException(nameof(cosmosDbStorageOptions)); } if (cosmosDbStorageOptions.CosmosDbEndpoint == null) { throw new ArgumentNullException(nameof(cosmosDbStorageOptions.CosmosDbEndpoint), "Service EndPoint for CosmosDB is required."); } if (string.IsNullOrEmpty(cosmosDbStorageOptions.AuthKey)) { throw new ArgumentException("AuthKey for CosmosDB is required.", nameof(cosmosDbStorageOptions.AuthKey)); } if (string.IsNullOrEmpty(cosmosDbStorageOptions.DatabaseId)) { throw new ArgumentException("DatabaseId is required.", nameof(cosmosDbStorageOptions.DatabaseId)); } if (string.IsNullOrEmpty(cosmosDbStorageOptions.ContainerId)) { throw new ArgumentException("ContainerId is required.", nameof(cosmosDbStorageOptions.ContainerId)); } _cosmosDbStorageOptions = cosmosDbStorageOptions; }
/// <summary> /// Initializes a new instance of the <see cref="CosmosDbPartitionedStorage"/> class. /// using the provided CosmosDB credentials, database ID, and container ID. /// </summary> /// <param name="cosmosDbStorageOptions">Cosmos DB partitioned storage configuration options.</param> public CosmosDbPartitionedStorage(CosmosDbPartitionedStorageOptions cosmosDbStorageOptions) { if (cosmosDbStorageOptions == null) { throw new ArgumentNullException(nameof(cosmosDbStorageOptions)); } if (cosmosDbStorageOptions.CosmosDbEndpoint == null) { throw new ArgumentException($"Service EndPoint for CosmosDB is required.", nameof(cosmosDbStorageOptions)); } if (string.IsNullOrEmpty(cosmosDbStorageOptions.AuthKey)) { throw new ArgumentException("AuthKey for CosmosDB is required.", nameof(cosmosDbStorageOptions)); } if (string.IsNullOrEmpty(cosmosDbStorageOptions.DatabaseId)) { throw new ArgumentException("DatabaseId is required.", nameof(cosmosDbStorageOptions)); } if (string.IsNullOrEmpty(cosmosDbStorageOptions.ContainerId)) { throw new ArgumentException("ContainerId is required.", nameof(cosmosDbStorageOptions)); } if (!string.IsNullOrWhiteSpace(cosmosDbStorageOptions.KeySuffix)) { if (cosmosDbStorageOptions.CompatibilityMode) { throw new ArgumentException($"CompatibilityMode cannot be 'true' while using a KeySuffix.", nameof(cosmosDbStorageOptions)); } // In order to reduce key complexity, we do not allow invalid characters in a KeySuffix // If the KeySuffix has invalid characters, the EscapeKey will not match var suffixEscaped = CosmosDbKeyEscape.EscapeKey(cosmosDbStorageOptions.KeySuffix); if (!cosmosDbStorageOptions.KeySuffix.Equals(suffixEscaped, StringComparison.Ordinal)) { throw new ArgumentException($"Cannot use invalid Row Key characters: {cosmosDbStorageOptions.KeySuffix}", nameof(cosmosDbStorageOptions)); } } _cosmosDbStorageOptions = cosmosDbStorageOptions; }
/// <summary> /// Initializes a new instance of the <see cref="CosmosDbPartitionedStorage"/> class. /// using the provided CosmosDB credentials, database ID, and collection ID. /// </summary> /// <param name="cosmosDbStorageOptions">Cosmos DB partitioned storage configuration options.</param> /// <param name="jsonSerializer">If passing in a custom JsonSerializer, we recommend the following settings: /// <para>jsonSerializer.TypeNameHandling = TypeNameHandling.All.</para> /// <para>jsonSerializer.NullValueHandling = NullValueHandling.Include.</para> /// <para>jsonSerializer.ContractResolver = new DefaultContractResolver().</para> /// </param> public CosmosDbPartitionedStorage(CosmosDbPartitionedStorageOptions cosmosDbStorageOptions, JsonSerializer jsonSerializer) : this(cosmosDbStorageOptions) { _jsonSerializer = jsonSerializer ?? throw new ArgumentNullException(nameof(jsonSerializer)); }