/// <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); }
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; }