public static IServiceCollection AddCommandClient(this IServiceCollection services, Action <AppCommandClientConfig> configure) { var client = new AppCommandClientConfig(); configure.Invoke(client); var sharedCredentials = new SharedClientCredentials(); client.GetSharedClientCredentials?.Invoke(sharedCredentials); sharedCredentials.MergeWith(client.ClientCredentials); services.TryAddSingleton <IHttpClientFactory, DefaultHttpClientFactory>(); services.TryAddScoped <AppCommandEntry>(s => { var clientCredsFactory = new ClientCredentialsAccessTokenFactory <AppCommandEntry>(client.ClientCredentials, new BearerHttpClientFactory <AppCommandEntry>(s.GetRequiredService <IHttpClientFactory>())); return(new AppCommandEntry(client.ServiceUrl, clientCredsFactory)); }); services.TryAddScoped <IAppCommandHalClientFactory>(s => { var clientCredsFactory = new ClientCredentialsAccessTokenFactory <AppCommandEntry>(client.ClientCredentials, new BearerHttpClientFactory <AppCommandEntry>(s.GetRequiredService <IHttpClientFactory>())); return(new AppCommandHalClientFactory(clientCredsFactory)); }); services.TryAddScoped <IAppCommandClient, AppCommandClient>(); services.TryAddScoped <AppCommandValueProvider>(); return(services); }
/// <summary> /// Add the AppTemplate setup to use client credentials to connect to the service. /// </summary> /// <param name="halClientSetup">Halcyon client setup.</param> /// <param name="configure">The configure callback.</param> /// <returns></returns> public static IHalcyonClientSetup <T> SetupHttpClientFactoryWithClientCredentials <T>(this IHalcyonClientSetup <T> halClientSetup, Action <OpenIdConnectClientCredentialsClientOptions> configure) { var options = new OpenIdConnectClientCredentialsClientOptions(); configure?.Invoke(options); var sharedCredentials = new SharedClientCredentials(); options.GetSharedClientCredentials?.Invoke(sharedCredentials); sharedCredentials.MergeWith(options.ClientCredentials); halClientSetup.Services.AddSingleton <IHttpClientFactory <T> >(s => { return(new ClientCredentialsAccessTokenFactory <T>(options.ClientCredentials, new BearerHttpClientFactory <T>(s.GetRequiredService <IHttpClientFactory>()))); }); return(halClientSetup); }
/// <summary> /// Add the home client set as a repository. /// </summary> /// <param name="services">The service collection.</param> /// <param name="configure">The configure callback.</param> /// <returns></returns> public static IServiceCollection AddHomeClientRepository(this IServiceCollection services, Action <HomeClientOptions> configure) { var options = new HomeClientOptions(); configure?.Invoke(options); var sharedCredentials = new SharedClientCredentials(); options.GetSharedClientCredentials?.Invoke(sharedCredentials); services.TryAddSingleton <IHttpClientFactory, DefaultHttpClientFactory>(); services.TryAddSingleton <IHomeClientManager>(s => { var manager = new HomeClientManager(); if (options.Clients != null) { foreach (var client in options.Clients) { var creds = client.Value.ClientCredentials; sharedCredentials.MergeWith(creds); var clientCredsFactory = new ClientCredentialsAccessTokenFactory <EntryPointInjector>(creds, new BearerHttpClientFactory <EntryPointInjector>(s.GetRequiredService <IHttpClientFactory>())); var entryPointInjector = new EntryPointInjector(client.Value.ServiceUrl, clientCredsFactory); manager.SetClient(client.Key, new HomeClient(entryPointInjector)); } } return(manager); }); services.TryAddScoped(typeof(IClientSwitchRepository <,>), typeof(ClientSwitchRepository <,>)); services.TryAddScoped(typeof(IClientThermostatRepository <,>), typeof(ClientThermostatRepository <,>)); services.AdditionalSwitchConfiguration(o => { o.AddSwitch(typeof(IClientSwitchRepository <,>)); o.AddThermostat(typeof(IClientThermostatRepository <,>)); }); return(services); }