using System; using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Hosting; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Logging; using Senparc.Weixin.Entities; using Microsoft.Extensions.Options; using Senparc.Weixin.MP.Containers; using Winsoft.GOV.XF.WebApi.WXCore.Data; using Microsoft.EntityFrameworkCore; using Winsoft.GOV.XF.WebApi.WXCore.Helpers; using Winsoft.GOV.XF.WebApi.WXCore.Models; using Winsoft.GOV.XF.WebApi.WXCore.Services; namespace Winsoft.GOV.XF.WebApi.WXCore { public class Startup { public Startup(IHostingEnvironment env) { var builder = new ConfigurationBuilder() .SetBasePath(env.ContentRootPath) .AddJsonFile("appsettings.json", optional: false, reloadOnChange: true) .AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true) .AddEnvironmentVariables(); Configuration = builder.Build(); //Senparc.Weixin.SDK 配置 builder.AddJsonFile("SenparcWeixin.json", optional: true); //提供网站根目录 Utilities.ContentRootPath = env.ContentRootPath; } public IConfigurationRoot Configuration { get; } // This method gets called by the runtime. Use this method to add services to the container. public void ConfigureServices(IServiceCollection services) { // Add framework services. services.AddMvc(); services.Configure(Configuration.GetSection("SenparcWeixinSetting")); // Adds a default in-memory implementation of IDistributedCache. services.AddDistributedMemoryCache(); services.AddSingleton(Configuration); services.AddSingleton(); services.AddSingleton(); services.AddSingleton(); services.AddSingleton(); services.AddSingleton(); services.AddSingleton(); services.AddDbContext(option => option.UseMySql(Configuration["Data:DefaultConnection:ConnectionString"])); services.AddSession(options => { // Set a short timeout for easy testing. options.IdleTimeout = TimeSpan.FromMinutes(30); }); services.AddTransient(); } // This method gets called by the runtime. Use this method to configure the HTTP request pipeline. public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory, IOptions senparcWeixinSetting, DbInitializer dbInitializer, XFDbContext context) { loggerFactory.AddConsole(Configuration.GetSection("Logging")); loggerFactory.AddDebug(); loggerFactory.AddFile(Configuration.GetSection("Logging")); Utilities.ConfigureLogger(loggerFactory); app.UseStaticFiles(); app.UseSession(); app.UseMvc(routes => { routes.MapRoute( name: "default", template: "{controller=Home}/{action=Index}/{id?}"); }); #region 微信相关 AccessTokenContainer.Register(senparcWeixinSetting.Value.WeixinAppId, senparcWeixinSetting.Value.WeixinAppSecret); dbInitializer.InitializeAsync(context).Wait(); Senparc.Weixin.Config.DefaultSenparcWeixinSetting = senparcWeixinSetting.Value; #endregion } } }