IAzureClientBuilder <TClient, TOptions> IAzureClientFactoryBuilderWithCredential.RegisterClientFactory <TClient, TOptions>(Func <TOptions, TokenCredential, TClient> clientFactory, bool requiresCredential)
        {
            var clientRegistration = new ClientRegistration <TClient>(DefaultClientName, (options, credential) => clientFactory((TOptions)options, credential));

            clientRegistration.RequiresTokenCredential = requiresCredential;

            _serviceCollection.AddSingleton(clientRegistration);

            _serviceCollection.TryAddSingleton(typeof(IConfigureOptions <AzureClientCredentialOptions <TClient> >), typeof(DefaultCredentialClientOptionsSetup <TClient>));
            _serviceCollection.TryAddSingleton(typeof(IOptionsMonitor <TOptions>), typeof(ClientOptionsMonitor <TClient, TOptions>));
            _serviceCollection.TryAddSingleton(typeof(ClientOptionsFactory <TClient, TOptions>), typeof(ClientOptionsFactory <TClient, TOptions>));
            _serviceCollection.TryAddSingleton(typeof(IAzureClientFactory <TClient>), typeof(AzureClientFactory <TClient, TOptions>));
            _serviceCollection.TryAddSingleton(
                typeof(TClient),
                provider => provider.GetService <IAzureClientFactory <TClient> >().CreateClient(DefaultClientName));

            return(new AzureClientBuilder <TClient, TOptions>(clientRegistration, _serviceCollection));
        }
 internal AzureClientBuilder(ClientRegistration <TClient> clientRegistration, IServiceCollection serviceCollection)
 {
     Registration      = clientRegistration;
     ServiceCollection = serviceCollection;
 }
 public ConfigureClientOptions(IServiceProvider serviceProvider, ClientRegistration <TClient, TOptions> registration, Action <TOptions, IServiceProvider> configureOptions)
 {
     _serviceProvider  = serviceProvider;
     _registration     = registration;
     _configureOptions = configureOptions;
 }