using VideoAnalysisCore.Common; using Learn.VideoAnalysis.Components; using Microsoft.OpenApi.Models; using AntDesign.ProLayout; using VideoAnalysisCore.AICore.SherpaOnnx; using Mapster; using VideoAnalysisCore.AICore.GPT; using VideoAnalysisCore.AICore.GPT.KIMI; using VideoAnalysisCore.AICore.GPT.ChatGPT; using Microsoft.Extensions.FileProviders; using VideoAnalysisCore.AICore.GPT.DeepSeek; using Microsoft.Extensions.DependencyInjection; using Learn.VideoAnalysis.Expand; namespace Learn.VideoAnalysis { public class Program { public static void Main(string[] args) { var builder = WebApplication.CreateBuilder(args); // Add services to the container. builder.Services.AddRazorComponents() .AddInteractiveServerComponents(); //.AddInteractiveWebAssemblyComponents(); builder.Services.AddHttpContextAccessor(); builder.Services.AddLogging(loggingBuilder => { loggingBuilder.ClearProviders(); // 清除默认的日志提供程序 loggingBuilder.AddConsole(); // 添加控制台日志提供程序 loggingBuilder.SetMinimumLevel(LogLevel.Warning); // 设置最小日志级别为 Warning }); builder.Services.AddControllers(); builder.Services.AddEndpointsApiExplorer(); builder.Services.AddSwaggerGen(c => { c.SwaggerDoc("v1", new OpenApiInfo { Title = "Learn.VideoAnalysis", Version = "v1", Description = "教学视频分析平台v1" }); var file = Path.Combine(AppContext.BaseDirectory, "Learn.VideoAnalysis.xml"); // xml文档绝对路径 c.IncludeXmlComments(file, true); // true : 显示控制器层注释 c.OrderActionsBy(o => o.RelativePath); // 对action的名称进行排序,如果有多个,就可以看见效果了。 }); //绑定 appsetting 配置 builder.Configuration.GetSection("AppConfig").Bind(AppCommon.Config); //初始化 插件 builder.Services.AddSqlSugarExpand(); builder.Services.AddDownloadFileExpand(2); builder.Services.AddAlibabaCloudVod(); builder.Services.AddRedisExpand(); builder.Services.AddSpeakerAI(); builder.Services.AddCoravel(); //SenseVoice.Init(); //异常过滤器 builder.Services.AddControllersWithViews(options => { options.Filters.Add(typeof(ExceptionFilter)); }); builder.Services.AddScoped(sp => { var httpContext = sp.GetRequiredService().HttpContext; if (httpContext != null) { return new HttpClient { BaseAddress = new Uri(httpContext.Request.Scheme + "://" + httpContext.Request.Host) }; } return new HttpClient(); }); //VideoAnalysisRazor.Program.AddClientServices(builder.Services); builder.Services.AddAntDesign(); builder.Services.AddMapster(); builder.Services.AddCorsExpand(); builder.Services.Configure(builder.Configuration.GetSection("ProSettings")); builder.Services.AddHttpClient(); builder.Services.AddHttpContextAccessor(); builder.Services.AddSingleton(); builder.Services.AddSingleton(); //builder.Services.AddSingleton(); //builder.Services.AddSingleton(); builder.Services.AddSingleton(); var app = builder.Build(); AppCommon.Services = app.Services; // Configure the HTTP request pipeline. if (app.Environment.IsDevelopment()) { app.UseSwagger(); app.UseSwaggerUI(); app.UseExceptionHandler("/Error"); } //添加wwwroot 静态目录 app.UseStaticFiles(); //添加 自定义 静态目录 app.UseStaticFiles(new StaticFileOptions { FileProvider = new PhysicalFileProvider(AppCommon.TaskCachedFile), RequestPath = "/video", }); app.UseAntiforgery(); app.MapRazorComponents() .AddInteractiveServerRenderMode(); //.AddInteractiveWebAssemblyRenderMode() //.AddAdditionalAssemblies(typeof(VideoAnalysisRazor._Imports).Assembly); app.MapControllers(); app.UseCorsExpand(); //自定义 应用 SqlSugarExpand.InitDB(); app.Services.UseCoravelExpand(); app.Run(); } } }