using Microsoft.AspNetCore.Authentication.Cookies; using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Hosting; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Hosting; using Microsoft.Extensions.Logging; using MySql.Data.MySqlClient; using Quartz; using Quartz.Impl; using Quartz.Spi; using SolarPower.Helper; using SolarPower.Models; using SolarPower.Quartz; using SolarPower.Quartz.Jobs; using SolarPower.Repository.Implement; using SolarPower.Repository.Interface; using SolarPower.Services; using SolarPower.Services.Implement; using SolarPower.Services.Interface; using System; using System.Collections.Generic; using System.Data; using System.Data.SqlClient; using System.Linq; using System.Threading.Tasks; namespace SolarPower { public class Startup { public IConfiguration Configuration { get; } public DBConfig dBConfig = new DBConfig(); public Startup(IConfiguration configuration) { Configuration = configuration; dBConfig.Server = Configuration.GetValue("DBConfig:Server"); dBConfig.Port = Configuration.GetValue("DBConfig:Port"); dBConfig.Database = Configuration.GetValue("DBConfig:Database"); dBConfig.Root = Configuration.GetValue("DBConfig:Root"); dBConfig.Password = Configuration.GetValue("DBConfig:Password"); } // This method gets called by the runtime. Use this method to add services to the container. public void ConfigureServices(IServiceCollection services) { services.AddControllersWithViews(); services.AddLogging( builder => { builder.AddFilter("Microsoft", LogLevel.Warning) .AddFilter("System", LogLevel.Warning) .AddFilter("NToastNotify", LogLevel.Warning) .AddConsole(); }); #region SMPT配置 services.AddTransient(); services.Configure(Configuration.GetSection("SMTPConfig")); #endregion #region DBHelper 注入 services.AddTransient(x => new DatabaseHelper(dBConfig)); #endregion #region Repository 注入 services.AddTransient(); services.AddTransient(); services.AddTransient(); services.AddTransient(); services.AddTransient(); services.AddTransient(); #endregion double loginExpireMinute = this.Configuration.GetValue("LoginExpireMinute"); services.AddSession(options => { options.IdleTimeout = TimeSpan.FromMinutes(loginExpireMinute); }); #region 加入背景執行 //services.AddHostedService(); //添加Quartz服務 services.AddSingleton(); services.AddSingleton(); //添加我們的Job services.AddSingleton(); services.AddSingleton( new JobSchedule(jobType: typeof(OperationScheduleJob), cronExpression: "0/5 * * * * ?") ); services.AddHostedService(); #endregion } // This method gets called by the runtime. Use this method to configure the HTTP request pipeline. public void Configure(IApplicationBuilder app, IWebHostEnvironment env, ILoggerFactory loggerFactory) { loggerFactory.AddFile("Logs/log-{Date}.txt"); if (env.IsDevelopment()) { app.UseDeveloperExceptionPage(); } else { app.UseExceptionHandler("/Home/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.UseSession(); app.UseHttpsRedirection(); app.UseStaticFiles(); app.UseRouting(); app.UseAuthorization(); app.UseEndpoints(endpoints => { endpoints.MapControllerRoute( name: "default", pattern: "{controller=Login}/{action=Index}/{id?}"); }); } } }