using Autofac; using Coravel; using Coravel.Events.Interfaces; using InitQ; using log4net; using log4net.Config; using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Hosting; using Microsoft.EntityFrameworkCore; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Hosting; using Ropin.Core.Common; using Ropin.Core.Extensions.ServiceExtensions; using Ropin.Environmentally.WebScada.Hubs; using Ropin.Environmentally.WebScada.Subscribe; using Ropin.Inspection.Common.Helper; using Ropin.Inspection.Model.Entities; using Ropin.Inspection.Repository; using Ropin.Inspection.Service; using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Reflection; using System.Threading.Tasks; namespace Ropin.Environmentally.WebScada { public class Startup { public Startup()//IConfiguration configuration { //Configuration = configuration; var configBuilder = new ConfigurationBuilder() .SetBasePath(Directory.GetCurrentDirectory()) .AddJsonFile("appsettings.json", optional: false, reloadOnChange: true); Configuration = configBuilder.Build(); var logRepo = LogManager.GetRepository(Assembly.GetEntryAssembly()); XmlConfigurator.Configure(logRepo, new FileInfo("log4net.config")); } public IConfiguration Configuration { get; } // This method gets called by the runtime. Use this method to add services to the container. [Obsolete] public void ConfigureServices(IServiceCollection services) { services.AddSingleton(new Appsettings(Configuration)); services.AddHttpClient(); services.AddControllersWithViews(); var rabbitMQ = Configuration.GetSection("RabbitMQ").Get(); services.AddSingleton(rabbitMQ); var apiUrlData = Configuration.GetSection("APIUrl").Get(); services.AddSingleton(apiUrlData); var IniInfluxData = Configuration.GetSection("IniInflux").Get(); services.AddSingleton(IniInfluxData); //services.AddControllers(); //services.AddScoped(); //services.AddTransient(); //services.AddRazorPages(); //services.AddScoped(); services.AddHostedService(); services.AddInitQ(m => { m.SuspendTime = 1000; m.ConnectionString = Configuration["ConnectionSetting:RedisConnection"]; m.ListSubscribe = new List() { typeof(RedisSubscribeBoxno), typeof(RedisIntervalSubscribeBoxno) }; m.ShowLog = false; }); services.AddNodeServices(); services.AddSignalR(); services.AddTransient(); var connectionString = Configuration["ConnectionSetting:MySqlConnection"]; ServerVersion serverVersion = ServerVersion.AutoDetect(connectionString); services.AddDbContext(options => options.UseMySql(connectionString, serverVersion)); //services.AddDbContextFactory(options => //{ // options.UseMySql(connectionString, serverVersion) // ; //}); //但很多场景下Scoped又不能满足我们,这时候就需要注入一个Singleton的DBContext的工厂方法 services.AddSingleton>(() => { var optionsBuilder = new DbContextOptionsBuilder(); optionsBuilder.UseMySql(connectionString, serverVersion); //如果有其他依赖的话,可以通过provider.GetService()来获取 return new InspectionDbContext(optionsBuilder.Options); }); services.AddEvents(); services.AddCors(options => { options.AddPolicy("cors", builder => builder .SetIsOriginAllowed(_ => true) .AllowAnyOrigin() .AllowAnyHeader() .AllowAnyMethod()); options.AddDefaultPolicy(builder => { builder.WithOrigins("https://example.com") .AllowAnyHeader() .WithMethods("GET", "POST") .AllowCredentials(); }); }); } public void ConfigureContainer(ContainerBuilder builder) { builder.RegisterModule(new AutofacModuleRegister()); } // This method gets called by the runtime. Use this method to configure the HTTP request pipeline. public void Configure(IApplicationBuilder app, IWebHostEnvironment env) { if (env.IsDevelopment()) { app.UseDeveloperExceptionPage(); //app.UseSwagger(); //app.UseSwaggerUI(c => c.SwaggerEndpoint("/swagger/v1/swagger.json", "UltrasonicAPI v1")); } else { app.UseExceptionHandler("/Error"); } app.UseStaticFiles(); app.UseRouting(); app.UseAuthorization(); app.UseCors("cors"); var provider = app.ApplicationServices; IEventRegistration registration = provider.ConfigureEvents(); registration.Register().Subscribe(); registration.Register().Subscribe(); //app.UseCors(option => option.WithOrigins("https://www.ropiniot.com").AllowCredentials().AllowAnyMethod().AllowAnyHeader()); //配置跨域 app.UseEndpoints(endpoints => { endpoints.MapHub("myhub"); endpoints.MapControllerRoute( name: "default", pattern: "{controller=Device}/{action=Index}/{id?}"); //endpoints.MapRazorPages(); }); } } }