Esempio n. 1
0
        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);
        }
Esempio n. 2
0
        /// <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);
        }
Esempio n. 3
0
        /// <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);
        }