/// <inheritdoc /> public CosmosClient CreateCosmosClient(CosmosDataStoreConfiguration configuration) { EnsureArg.IsNotNull(configuration, nameof(configuration)); var host = configuration.Host; var key = configuration.Key; if (string.IsNullOrWhiteSpace(host) && string.IsNullOrWhiteSpace(key)) { _logger.LogWarning("No connection string provided, attempting to connect to local emulator."); host = CosmosDbLocalEmulator.Host; key = CosmosDbLocalEmulator.Key; } _logger.LogInformation("Creating CosmosClient instance for {DatabaseId}, Host: {Host}", configuration.DatabaseId, host); var builder = new CosmosClientBuilder(host, key) .WithConnectionModeDirect(enableTcpConnectionEndpointRediscovery: true) .WithCustomSerializer(new FhirCosmosSerializer()) .WithThrottlingRetryOptions(TimeSpan.FromSeconds(configuration.RetryOptions.MaxWaitTimeInSeconds), configuration.RetryOptions.MaxNumberOfRetries) .AddCustomHandlers(_requestHandlers.ToArray()); if (configuration.PreferredLocations?.Any() == true) { builder.WithApplicationPreferredRegions(configuration.PreferredLocations?.ToArray()); } if (configuration.DefaultConsistencyLevel != null) { builder.WithConsistencyLevel(configuration.DefaultConsistencyLevel.Value); } return(builder.Build()); }
public static IServiceCollection AddCosmosDb(this IServiceCollection services, IConfiguration config) { if (!TryGetConnectionString(config, out var connectionString)) { throw new InvalidOperationException("Could not obtain a connection string from configuration."); } var builder = new CosmosClientBuilder(connectionString) .WithSerializerOptions(new CosmosSerializationOptions { PropertyNamingPolicy = CosmosPropertyNamingPolicy.CamelCase }) .WithConnectionMode(config["CosmosDb:ConnectionMode"]); var regions = config.GetSection("CosmosDb:PreferredRegions").Get <string[]>(); if (regions?.Length > 0) { builder = builder.WithApplicationPreferredRegions(regions); } services.AddSingleton(builder.Build()); return(services.AddSingleton(provider => provider.GetRequiredService <CosmosClient>() .GetContainer(config["CosmosDb:DatabaseId"], config["CosmosDb:ContainerId"]))); }