Пример #1
0
        /// <summary>
        /// Add Esquio configuration using  store that connect with HTTP API on any  Esquio UI deployment.
        /// </summary>
        /// <param name="builder">The <see cref="IEsquioBuilder"/> used.</param>
        /// <param name="setup">The action to configure.</param>
        /// <returns>A new <see cref="IEsquioBuilder"/> that can be chained for register services.</returns>
        public static IEsquioBuilder AddHttpStore(this IEsquioBuilder builder, Action <HttpStoreOptions> setup)
        {
            const string XAPIKEYHEADERNAME = "X-API-KEY";

            var options = new HttpStoreOptions();

            setup.Invoke(options);

            builder.Services
            .Configure <HttpStoreOptions>(setup =>
            {
                setup.BaseAddress = options.BaseAddress;
                setup.ApiKey      = options.ApiKey;
                setup.AbsoluteExpirationRelativeToNow = options.AbsoluteExpirationRelativeToNow;
                setup.SlidingExpiration = options.SlidingExpiration;
                setup.Timeout           = options.Timeout;
                setup.CacheEnabled      = options.CacheEnabled;
            });

            builder.Services
            .AddHttpClient(EsquioConstants.ESQUIO, (serviceProvider, httpclient) =>
            {
                var options = serviceProvider.GetRequiredService <IOptions <HttpStoreOptions> >();

                httpclient.BaseAddress = options.Value.BaseAddress;
                httpclient.DefaultRequestHeaders.Add(XAPIKEYHEADERNAME, options.Value.ApiKey);
                httpclient.Timeout = options.Value.Timeout;
            })
            .Services
            .AddDistributedMemoryCache()
            .AddScoped <IRuntimeFeatureStore, EsquioHttpStore>()
            .AddSingleton <EsquioHttpStoreDiagnostics>();

            return(builder);
        }
Пример #2
0
        public EsquioHttpStore(IHttpClientFactory httpClientFactory, IOptions <HttpStoreOptions> options, EsquioHttpStoreDiagnostics diagnostics, IDistributedCache cache = null)
        {
            _httpClientFactory = httpClientFactory ?? throw new ArgumentNullException(nameof(httpClientFactory));
            _            = options ?? throw new ArgumentNullException(nameof(options));
            _diagnostics = diagnostics ?? throw new ArgumentNullException(nameof(diagnostics));

            _cache   = cache;
            _options = options.Value;
        }