using decePubClient; using Microsoft.AspNetCore.Components.WebAssembly.Hosting; using System.Net.Http.Headers; using System.Text.Json; using Blazored.LocalStorage; using decePubClient.Extensions; using decePubClient.Models; using decePubClient.Services; using Toolbelt.Blazor.Extensions.DependencyInjection; using Microsoft.AspNetCore.Components.Authorization; using Microsoft.AspNetCore.Components.Web; using Microsoft.AspNetCore.Components.WebAssembly.Authentication; using Microsoft.Extensions.DependencyInjection.Extensions; using Microsoft.Extensions.Options; using SocialPub.ClientModels; using collAnon.Client.Services; var builder = WebAssemblyHostBuilder.CreateDefault(args); builder.RootComponents.Add("#app"); builder.RootComponents.Add("head::after"); builder.Services.AddBlazorDownloadFile(); builder.Services.AddApiAuthorization(); builder.Services.AddOptions() .AddAuthorizationCore(options => { options.AddPolicy(Policies.IsAdmin, ExtensionMethods.IsAdminPolicy()); options.AddPolicy(Policies.IsUser, ExtensionMethods.IsUserPolicy()); options.AddPolicy(Policies.IsModerator, ExtensionMethods.IsUserModeratorPolicy()); }) .AddTransient(); builder.Services.TryAddEnumerable( ServiceDescriptor.Singleton>, ApiAuthorizationOptionsConfiguration>()); builder.Services.AddBlazoredLocalStorage(config => { config.JsonSerializerOptions.WriteIndented = false; config.JsonSerializerOptions.PropertyNameCaseInsensitive = true; config.JsonSerializerOptions.IgnoreReadOnlyProperties = true; config.JsonSerializerOptions.ReadCommentHandling = JsonCommentHandling.Skip; config.JsonSerializerOptions.PropertyNamingPolicy = JsonNamingPolicy.CamelCase; }) .AddScoped() .AddScoped() .AddScoped(provider => provider.GetRequiredService()) .AddSingleton(typeof(CoalescingStringLocalizer)) //.AddTransient() .AddHeadElementHelper(options => options.DisableClientScriptAutoInjection = true) .AddLocalization() .AddTransient() .AddLogging(lb => lb.SetMinimumLevel(LogLevel.Debug)) .AddIndexedDb(); builder.Services.AddHttpClient("default", client => { client.BaseAddress = new Uri(builder.HostEnvironment.BaseAddress); client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json")); }); builder.Services.AddSingleton(serviceProvider => { var conf = serviceProvider.GetRequiredService(); return conf.GetSection(nameof(AppConfiguration)).Get(); }); var host = builder.Build(); await host.SetDefaultCulture(); await host.RunAsync();