Example #1
0
        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);
        }
Example #2
0
        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);
        }
Example #3
0
        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);
        }