Program.cs 2.75 KB
using AntDesign.ProLayout;
using DataAcquisition.DataAccess;
using DataAcquisition.Services;
using DataAcquisition.Services.DataAnalysis;
using Microsoft.AspNetCore.Components;
using Microsoft.EntityFrameworkCore;
using Microsoft.OpenApi.Models;
using System.Text.Json.Serialization;

var builder = WebApplication.CreateBuilder(args);

// Add services to the container.
builder.Services.AddRazorPages();
builder.Services.AddServerSideBlazor();
builder.Services.AddCors(options =>
{
    options.AddPolicy("CorsPolicy", b =>
    {
        b.AllowAnyOrigin().AllowAnyMethod().AllowAnyHeader();
    });
});
builder.Services.AddControllers().AddJsonOptions(options =>
{
    options.JsonSerializerOptions.ReferenceHandler = ReferenceHandler.IgnoreCycles;
});

builder.Services.AddSwaggerGen(c =>
{
    c.SwaggerDoc("v1", new OpenApiInfo
    {
        Title = "数据采集 - WebApi",
        License = new OpenApiLicense
        {
            Name = "长沙华恒机器人系统有限公司",
            Url = new Uri("http://www.huahengrobot.com")
        },
        Version = "v1",
    });
    c.IncludeXmlComments(Path.Combine(AppContext.BaseDirectory, "DataAcquisition.xml"), true);
    c.OrderActionsBy(o => o.RelativePath);
}
);
builder.Services.AddAntDesign();
builder.Services.AddScoped(sp => new HttpClient
{
    BaseAddress = new Uri(sp.GetService<NavigationManager>()!.BaseUri)
});
builder.Services.AddHttpClient("iot", x =>
{
    x.BaseAddress = new Uri("");
    x.DefaultRequestHeaders.Add("Content-Type", "application/json; charset=utf-8");
}).SetHandlerLifetime(TimeSpan.FromSeconds(5));

builder.Services.Configure<ProSettings>(builder.Configuration.GetSection("ProSettings"));
var connectionString = builder.Configuration.GetConnectionString("Default") ?? string.Empty;
builder.Services.AddDbContextFactory<DataContext>(option => option.UseSqlite(connectionString));
builder.Services.AddSingleton<IDataAnalysis, RobotDataAnalysis>();
builder.Services.AddSingleton<IDataAnalysis, SiemensPLCDataAnalysis>();
builder.Services.AddSingleton<IDataAnalysis, EfortDataAnalysis>();
builder.Services.AddSingleton<DataCacheService>();
builder.Services.AddHostedService<SystemBackgroundService>();
builder.Services.AddSingleton<IotService>();

var app = builder.Build();

// Configure the HTTP request pipeline.
if (!app.Environment.IsDevelopment())
{
    app.UseExceptionHandler("/Error");
    // The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
    app.UseHsts();
}

app.UseSwagger();
app.UseSwaggerUI(c => c.SwaggerEndpoint("/swagger/v1/swagger.json", "数据采集WebApi接口"));
app.UseHttpsRedirection();

app.UseStaticFiles();
app.UseRouting();
app.UseCors("CorsPolicy");
app.MapControllers();
app.MapBlazorHub();
app.MapFallbackToPage("/_Host");

app.Run();