public static IBaleaBuilder AddConfigurationStore(this IBaleaBuilder builder, IConfiguration configuration, string key = DefaultSectionName) { builder.Services.AddOptions(); builder.Services.Configure <BaleaConfiguration>(configuration.GetSection(key)); builder.Services.AddScoped(sp => sp.GetRequiredService <IOptionsSnapshot <BaleaConfiguration> >().Value); builder.Services.AddScoped <IRuntimeAuthorizationServerStore, ConfigurationRuntimeAuthorizationServerStore>(); return(builder); }
public static IBaleaBuilder AddEntityFrameworkCoreStore(this IBaleaBuilder builder, Action <StoreOptions> configurer = null) { var options = new StoreOptions(); configurer?.Invoke(options); if (options.ConfigureDbContext != null) { builder.Services.AddDbContextPool <BaleaDbContext>(optionsAction => options.ConfigureDbContext?.Invoke(optionsAction)); } builder.Services.AddScoped <IRuntimeAuthorizationServerStore, EntityFrameworkCoreRuntimeAuthorizationServerStore <BaleaDbContext> >(); return(builder); }
public static IBaleaBuilder AddApiStore(this IBaleaBuilder builder, Action <StoreOptions> setup) { var options = new StoreOptions(); setup?.Invoke(options); builder.Services.Configure <StoreOptions>(setup => { setup.CacheEnabled = options.CacheEnabled; setup.AbsoluteExpirationRelativeToNow = options.AbsoluteExpirationRelativeToNow; setup.SlidingExpiration = options.SlidingExpiration; setup.RetryCount = options.RetryCount; setup.HandledEventsAllowedBeforeBreaking = options.HandledEventsAllowedBeforeBreaking; setup.DurationOfBreak = options.DurationOfBreak; setup.BaseAddress = options.BaseAddress; setup.ApiKey = options.ApiKey; }); builder.Services.AddScoped(sp => sp.GetRequiredService <IOptions <StoreOptions> >().Value); builder.Services.AddTransient <LoggingHandler>(); builder.Services .AddHttpClient(Constants.BaleaClient, (sp, client) => { var options = sp.GetRequiredService <IOptions <StoreOptions> >().Value; client.BaseAddress = options.BaseAddress; client.DefaultRequestHeaders.Add(API_KEY_HEADER, options.ApiKey); }) .AddHttpMessageHandler <LoggingHandler>() .AddTransientHttpErrorPolicy(p => p.RetryAsync(options.RetryCount)) .AddTransientHttpErrorPolicy(p => p.CircuitBreakerAsync(options.HandledEventsAllowedBeforeBreaking, TimeSpan.FromSeconds(options.DurationOfBreak))); builder.Services.AddScoped <IRuntimeAuthorizationServerStore, ApiRuntimeAuthorizationServerStore>(); return(builder); }