using Hangfire; using Hangfire.Dashboard; using Hangfire.MySql; using Hangfire.Storage.SQLite; using Infrastructure.Email; using Infrastructure.Extensions; using Infrastructure.Sms; using Infrastructure.UI; using Infrastructure.Web; using IoT.Shared.Services; using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Hosting; using Microsoft.AspNetCore.Routing; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Hosting; using Microsoft.Extensions.Logging; using Platform.Data; using Platform.EventHandlers; using Platform.Services; using System; using System.Collections.Generic; using System.Transactions; using UoN.ExpressiveAnnotations.NetCore.DependencyInjection; namespace Platform { public class Startup : BaseStartup { public Startup(IConfiguration configuration, IWebHostEnvironment env) : base(configuration, env) { } public override void ConfigureServices(IServiceCollection services) { services.AddTransient(); services.AddTransient(); services.AddTransient(); services.AddTransient(); if (Env.IsDevelopment()) { services.AddTransient(); services.AddTransient(); } else { services.AddTransient(); services.AddTransient(); } services.AddTransient(); services.AddTransient();//hangfire需要 services.AddHostedService(); base.ConfigureServices(services); if (Configuration.GetAppSetting("JobDatabase") == "MySQL") { var connectionString = Configuration.GetConnectionString("Job.MySQL"); services.AddHangfire(configuration => configuration.UseStorage(new MySqlStorage(connectionString, new MySqlStorageOptions { TransactionIsolationLevel = IsolationLevel.ReadCommitted, QueuePollInterval = TimeSpan.FromSeconds(15), JobExpirationCheckInterval = TimeSpan.FromHours(1), CountersAggregateInterval = TimeSpan.FromMinutes(5), PrepareSchemaIfNecessary = true, DashboardJobListLimit = 50000, TransactionTimeout = TimeSpan.FromMinutes(1), TablesPrefix = "Hangfire" }))); } else { services.AddHangfire(o => o.UseSQLiteStorage("job.db")); } services.AddReverseProxy().LoadFromConfig(Configuration.GetSection("ReverseProxy")); services.AddExpressiveAnnotations(); } public override void Configure(IApplicationBuilder app, IWebHostEnvironment env, ILoggerFactory loggerFactory) { base.Configure(app, env, loggerFactory); var options = new DashboardOptions { Authorization = new[] { new MyDashboardAuthorizationFilter() }, IsReadOnlyFunc = o => o.GetHttpContext().User.Identity.Name != "super", DashboardTitle="定时任务看板" }; app.UseHangfireDashboard("/job", options); app.UseHangfireServer(new BackgroundJobServerOptions { ServerName = $"IoTCenter:{Guid.NewGuid()}", }); app.UseEndpoints(endpoints => { endpoints.MapReverseProxy(); }); } public override void ConfigureOptions(IServiceCollection services) { services.ConfigureOptions(new FileConfigureOptions(Env, new List { "IoT.Shared" })); } public override void UseSignalR(IEndpointRouteBuilder endpoints) { this.UseSignalR(endpoints); } public override void AddDbContext(IServiceCollection services) { this.AddDbContext(services); } } }