BlobClientBuilderExtensions
Extension methods to add  BlobServiceClient client to clients builder.
            
                using Azure;
using Azure.Core;
using Azure.Core.Extensions;
using Azure.Storage;
using Azure.Storage.Blobs;
using System;
using System.Diagnostics.CodeAnalysis;
namespace Microsoft.Extensions.Azure
{
    public static class BlobClientBuilderExtensions
    {
        public static IAzureClientBuilder<BlobServiceClient, BlobClientOptions> AddBlobServiceClient<TBuilder>(this TBuilder builder, string connectionString) where TBuilder : IAzureClientFactoryBuilder
        {
            ref TBuilder reference = ref builder;
            TBuilder val = default(TBuilder);
            if (val == null) {
                val = reference;
                ref reference = ref val;
            }
            return reference.RegisterClientFactory<BlobServiceClient, BlobClientOptions>((Func<BlobClientOptions, BlobServiceClient>)((BlobClientOptions options) => new BlobServiceClient(connectionString, options)));
        }
        public static IAzureClientBuilder<BlobServiceClient, BlobClientOptions> AddBlobServiceClient<TBuilder>(this TBuilder builder, Uri serviceUri) where TBuilder : IAzureClientFactoryBuilderWithCredential
        {
            ref TBuilder reference = ref builder;
            TBuilder val = default(TBuilder);
            if (val == null) {
                val = reference;
                ref reference = ref val;
            }
            return reference.RegisterClientFactory<BlobServiceClient, BlobClientOptions>((Func<BlobClientOptions, TokenCredential, BlobServiceClient>)delegate(BlobClientOptions options, TokenCredential token) {
                if (token == null)
                    return new BlobServiceClient(serviceUri, options);
                return new BlobServiceClient(serviceUri, token, options);
            }, false);
        }
        public static IAzureClientBuilder<BlobServiceClient, BlobClientOptions> <>(this TBuilder builder, Uri serviceUri, StorageSharedKeyCredential sharedKeyCredential) where  : IAzureClientFactoryBuilder
        {
            ref TBuilder reference = ref builder;
            TBuilder val = default(TBuilder);
            if (val == null) {
                val = reference;
                ref reference = ref val;
            }
            return reference.RegisterClientFactory<BlobServiceClient, BlobClientOptions>((Func<BlobClientOptions, BlobServiceClient>)((BlobClientOptions options) => new BlobServiceClient(serviceUri, sharedKeyCredential, options)));
        }
        public static IAzureClientBuilder<BlobServiceClient, BlobClientOptions> AddBlobServiceClient<TBuilder>(this TBuilder builder, Uri serviceUri, TokenCredential tokenCredential) where TBuilder : IAzureClientFactoryBuilderWithCredential
        {
            ref TBuilder reference = ref builder;
            TBuilder val = default(TBuilder);
            if (val == null) {
                val = reference;
                ref reference = ref val;
            }
            return reference.RegisterClientFactory<BlobServiceClient, BlobClientOptions>((Func<BlobClientOptions, TokenCredential, BlobServiceClient>)((BlobClientOptions options, TokenCredential token) => new BlobServiceClient(serviceUri, token, options)), true);
        }
        public static IAzureClientBuilder<BlobServiceClient, BlobClientOptions> AddBlobServiceClient<TBuilder>(this TBuilder builder, Uri serviceUri, AzureSasCredential sasCredential) where TBuilder : IAzureClientFactoryBuilder
        {
            ref TBuilder reference = ref builder;
            TBuilder val = default(TBuilder);
            if (val == null) {
                val = reference;
                ref reference = ref val;
            }
            return reference.RegisterClientFactory<BlobServiceClient, BlobClientOptions>((Func<BlobClientOptions, BlobServiceClient>)((BlobClientOptions options) => new BlobServiceClient(serviceUri, sasCredential, options)));
        }
        [RequiresUnreferencedCode("Binding strongly typed objects to configuration values is not supported with trimming. Use the Configuration Binder Source Generator (EnableConfigurationBindingGenerator=true) instead.")]
        [System.Diagnostics.CodeAnalysis.RequiresDynamicCode("Binding strongly typed objects to configuration values requires generating dynamic code at runtime, for example instantiating generic types. Use the Configuration Binder Source Generator (EnableConfigurationBindingGenerator=true) instead.")]
        public static IAzureClientBuilder<BlobServiceClient, BlobClientOptions> AddBlobServiceClient<TBuilder, TConfiguration>(this TBuilder builder, TConfiguration configuration) where TBuilder : IAzureClientFactoryBuilderWithConfiguration<TConfiguration>
        {
            return builder.RegisterClientFactory<BlobServiceClient, BlobClientOptions>(configuration);
        }
    }
}