Files
hcs/Hcs.WebApp/Program.cs

100 lines
3.5 KiB
C#

using Hcs.WebApp.BackgroundServices;
using Hcs.WebApp.BackgroundServices.CampaignManagers;
using Hcs.WebApp.BackgroundServices.OperationExecutors;
using Hcs.WebApp.Components;
using Hcs.WebApp.Components.Shared;
using Hcs.WebApp.Data.Hcs;
using Hcs.WebApp.Data.Identity;
using Hcs.WebApp.Services;
using Microsoft.AspNetCore.Components;
using Microsoft.AspNetCore.Identity;
using Microsoft.EntityFrameworkCore;
using Radzen;
using Radzen.Blazor;
var builder = WebApplication.CreateBuilder(args);
builder.Services
.AddRazorComponents()
.AddInteractiveServerComponents();
builder.Services.AddControllers();
builder.Services.AddRadzenComponents();
builder.Services.AddHttpClient("WithIdentity").AddHeaderPropagation(x => x.Headers.Add("Cookie"));
builder.Services.AddHeaderPropagation(x => x.Headers.Add("Cookie"));
builder.Services.AddAuthentication();
builder.Services.AddAuthorization();
var identityConnection = builder.Configuration.GetConnectionString("IdentityConnection") ?? throw new InvalidOperationException("Íå óäàëîñü ïîëó÷èòü çíà÷åíèå èç 'IdentityConnection'");
builder.Services.AddDbContextFactory<AppIdentityDbContext>(options => options.UseSqlServer(identityConnection));
builder.Services
.AddIdentity<AppUser, AppRole>(options =>
{
options.Password.RequiredLength = 6;
options.Password.RequireNonAlphanumeric = false;
options.Password.RequireDigit = false;
options.Password.RequireLowercase = false;
options.Password.RequireUppercase = false;
options.Password.RequiredUniqueChars = 1;
})
.AddEntityFrameworkStores<AppIdentityDbContext>()
.AddDefaultTokenProviders();
if (builder.Environment.IsDevelopment())
{
var hcsProdConnection = builder.Configuration.GetConnectionString("HcsSit2Connection") ?? throw new InvalidOperationException("Íå óäàëîñü ïîëó÷èòü çíà÷åíèå èç 'HcsSit2Connection'");
builder.Services.AddDbContextFactory<HcsDbContext>(options => options.UseSqlServer(hcsProdConnection));
}
else
{
var hcsProdConnection = builder.Configuration.GetConnectionString("HcsProdConnection") ?? throw new InvalidOperationException("Íå óäàëîñü ïîëó÷èòü çíà÷åíèå èç 'HcsProdConnection'");
builder.Services.AddDbContextFactory<HcsDbContext>(options => options.UseSqlServer(hcsProdConnection));
}
#if USE_MOCK
builder.Services.AddTransient<IClientProvider, MockClientProvider>();
#else
builder.Services.AddTransient<IClientProvider, ClientProvider>();
#endif
builder.Services.AddScoped<IdentityService>();
builder.Services.AddScoped<UsersService>();
builder.Services.AddScoped<HeadquartersService>();
builder.Services.AddScoped<RegistryService>();
builder.Services.AddSingleton<CampaignManagementState>();
builder.Services.AddSingleton<OperationExecutionState>();
builder.Services.AddSingleton<ManagerFactory>();
builder.Services.AddSingleton<ExecutorFactory>();
builder.Services.AddHostedService<CampaignManagementService>();
builder.Services.AddHostedService<OperationExecutionService>();
var activator = new RadzenComponentActivator();
activator.Override(typeof(RadzenDataGrid<>), typeof(LocalizedRadzenDataGrid<>));
builder.Services.AddSingleton<IComponentActivator>(activator);
var app = builder.Build();
if (!app.Environment.IsDevelopment())
{
app.UseExceptionHandler("/error", createScopeForErrors: true);
app.UseHsts();
}
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseHeaderPropagation();
app.UseRouting();
app.UseAntiforgery();
app.UseAuthentication();
app.UseAuthorization();
app.MapControllers();
app
.MapRazorComponents<App>()
.AddInteractiveServerRenderMode();
app.Run();