public async Task InvokeAsync(HttpContext context) { if (Appsettings.app("AppSettings", "SeedDBEnabled").ObjToBool() || Appsettings.app("AppSettings", "SeedDBDataEnabled").ObjToBool()) { DBSeed.SeedAsync(_myContext, _env.WebRootPath).Wait(); await _next(context); } else { await _next(context); } }
public static void Main(string[] args) { XmlDocument log4netConfig = new XmlDocument(); log4netConfig.Load(File.OpenRead("Log4net.config")); var repo = log4net.LogManager.CreateRepository( Assembly.GetEntryAssembly(), typeof(log4net.Repository.Hierarchy.Hierarchy)); log4net.Config.XmlConfigurator.Configure(repo, log4netConfig["log4net"]); // 生成承载 web 应用程序的 Microsoft.AspNetCore.Hosting.IWebHost。Build是WebHostBuilder最终的目的,将返回一个构造的WebHost,最终生成宿主。 var host = CreateHostBuilder(args).Build(); var hadSeeded = Environment.GetEnvironmentVariable("ASPNETCORE_HAD_SEED"); if (string.IsNullOrWhiteSpace(hadSeeded)) { // 创建可用于解析作用域服务的新 Microsoft.Extensions.DependencyInjection.IServiceScope。 using (var scope = host.Services.CreateScope()) { var services = scope.ServiceProvider; var loggerFactory = services.GetRequiredService <ILoggerFactory>(); try { // 从 system.IServicec提供程序获取 T 类型的服务。 // 数据库连接字符串是在 Model 层的 Seed 文件夹下的 MyContext.cs 中 var configuration = services.GetRequiredService <IConfiguration>(); if (configuration.GetSection("AppSettings")["SeedDBEnabled"].ObjToBool() || configuration.GetSection("AppSettings")["SeedDBDataEnabled"].ObjToBool()) { var myContext = services.GetRequiredService <MyContext>(); var Env = services.GetRequiredService <IWebHostEnvironment>(); DBSeed.SeedAsync(myContext, Env.WebRootPath).Wait(); Environment.SetEnvironmentVariable("ASPNETCORE_HAD_SEED", "1"); } } catch (Exception e) { log.Error($"Error occured seeding the Database.\n{e.Message}"); throw; } } } // 运行 web 应用程序并阻止调用线程, 直到主机关闭。 // 创建完 WebHost 之后,便调用它的 Run 方法,而 Run 方法会去调用 WebHost 的 StartAsync 方法 // 将Initialize方法创建的Application管道传入以供处理消息 // 执行HostedServiceExecutor.StartAsync方法 // ※※※※ 有异常,查看 Log 文件夹下的异常日志 ※※※※ host.Run(); }
public IContainer DICollections() { var basePath = Microsoft.DotNet.PlatformAbstractions.ApplicationEnvironment.ApplicationBasePath; IServiceCollection services = new ServiceCollection(); services.AddAutoMapper(typeof(Startup)); services.AddScoped <IHostingEnvironment, HostingEnvironment>(); services.AddSingleton(new Appsettings(basePath)); services.AddSingleton <IRedisCacheManager, RedisCacheManager>(); services.AddScoped <Blog.Core.Model.Models.DBSeed>(); services.AddScoped <Blog.Core.Model.Models.MyContext>(); //实例化 AutoFac 容器 var builder = new ContainerBuilder(); //builder.RegisterType<AdvertisementServices>().As<IAdvertisementServices>(); //指定已扫描程序集中的类型注册为提供所有其实现的接口。 var servicesDllFile = Path.Combine(basePath, "Blog.Core.Services.dll"); var assemblysServices = Assembly.LoadFrom(servicesDllFile); builder.RegisterAssemblyTypes(assemblysServices) .AsImplementedInterfaces() .InstancePerLifetimeScope() .EnableInterfaceInterceptors(); var repositoryDllFile = Path.Combine(basePath, "Blog.Core.Repository.dll"); var assemblysRepository = Assembly.LoadFrom(repositoryDllFile); builder.RegisterAssemblyTypes(assemblysRepository).AsImplementedInterfaces(); //将services填充到Autofac容器生成器中 builder.Populate(services); //使用已进行的组件登记创建新容器 var ApplicationContainer = builder.Build(); var blogservice = ApplicationContainer.Resolve <IBlogArticleServices>(); var myContext = ApplicationContainer.Resolve <MyContext>(); DBSeed.SeedAsync(myContext).Wait(); return(ApplicationContainer); }
public static void Main(string[] args) { // 配置 Serilog #region Serilog //Log.Logger = new LoggerConfiguration() // // 最小的日志输出级别 // .MinimumLevel.Information() // // 日志调用类命名空间如果以 Microsoft 开头,覆盖日志输出最小级别为 Information // .MinimumLevel.Override("Microsoft", LogEventLevel.Information) // .Enrich.FromLogContext() // // 配置日志输出到控制台 // .WriteTo.Console() // // 配置日志输出到文件,文件输出到当前项目的 logs 目录下 // // 日记的生成周期为每天 // .WriteTo.File(Path.Combine("logs", @"logx.txt"), rollingInterval: RollingInterval.Day) // // 创建 logger // .CreateLogger(); #endregion // 创建可用于解析作用域服务的新 Microsoft.Extensions.DependencyInjection.IServiceScope。 //CreateHostBuilder(args).Build().Run();//原本 // 生成承载 web 应用程序的 Microsoft.AspNetCore.Hosting.IWebHost。Build是WebHostBuilder最终的目的,将返回一个构造的WebHost,最终生成宿主。 var host = CreateHostBuilder(args).Build(); // 创建可用于解析作用域服务的新 Microsoft.Extensions.DependencyInjection.IServiceScope。 using (var scope = host.Services.CreateScope()) { var services = scope.ServiceProvider; try { var configuration = services.GetRequiredService <IConfiguration>(); if (Convert.ToBoolean(configuration.GetSection("AppSettings")["SeedDBEnabled"])) { var myContext = services.GetRequiredService <MyContext>(); DBSeed.SeedAsync(myContext).Wait(); } } catch (Exception e) { throw; } } host.Run(); }
public static void UseSeedDataMildd(this IApplicationBuilder app, MyContext myContext, string webRootPath) { if (app == null) { throw new ArgumentNullException(nameof(app)); } try { if (Appsettings.app("AppSettings", "SeedDBEnabled").ObjToBool() || Appsettings.app("AppSettings", "SeedDBDataEnabled").ObjToBool()) { DBSeed.SeedAsync(myContext, webRootPath).Wait(); } } catch (Exception e) { log.Error($"Error occured seeding the Database.\n{e.Message}"); throw; } }
public static void Main(string[] args) { // 生成承载 web 应用程序的 Microsoft.AspNetCore.Hosting.IWebHost。Build是WebHostBuilder最终的目的,将返回一个构造的WebHost,最终生成宿主。 var host = CreateWebHostBuilder(args).Build(); // 创建可用于解析作用域服务的新 Microsoft.Extensions.DependencyInjection.IServiceScope。 using (var scope = host.Services.CreateScope()) { var services = scope.ServiceProvider; var loggerFactory = services.GetRequiredService <ILoggerFactory>(); //执行完startup类之后才执行下面 #region 生成数据库 生成一次之后就可以注释掉了 以防重复执行后覆盖数据 或者在 appsettings.json修改 SeedDBEnabled 为false try { // 从 system.IServicec提供程序获取 T 类型的服务。 // 为了大家的数据安全,这里先注释掉了 // 数据库连接字符串是在 Model 层的 Seed 文件夹下的 MyContext.cs 中 var configuration = services.GetRequiredService <IConfiguration>(); if (configuration.GetSection("AppSettings")["SeedDBEnabled"].ObjToBool()) { var myContext = services.GetRequiredService <MyContext>(); DBSeed.SeedAsync(myContext).Wait(); } } catch (Exception e) { var logger = loggerFactory.CreateLogger <Program>(); logger.LogError(e, "Error occured seeding the Database."); throw; } } #endregion // 运行 web 应用程序并阻止调用线程, 直到主机关闭。 // 创建完 WebHost 之后,便调用它的 Run 方法,而 Run 方法会去调用 WebHost 的 StartAsync 方法 // 将Initialize方法创建的Application管道传入以供处理消息 // 执行HostedServiceExecutor.StartAsync方法 host.Run(); }
public static void Main(string[] args) { var host = CreateWebHostBuilder(args).Build(); // 创建可用于解析作用域服务的新 Microsoft.Extensions.DependencyInjection.IServiceScope。 using (var scope = host.Services.CreateScope()) { var service = scope.ServiceProvider; var loggerFactory = service.GetRequiredService <ILoggerFactory>(); try { var myContext = service.GetRequiredService <MyContext>(); DBSeed.SeedAsync(myContext).Wait(); } catch (Exception e) { var logger = loggerFactory.CreateLogger <Program>(); logger.LogError(e, "Error occured seeding the Database."); } } host.Run(); }
public static void Main(string[] args) { // 生成承载 web 应用程序的 Microsoft.AspNetCore.Hosting.IWebHost。Build是WebHostBuilder最终的目的,将返回一个构造的WebHost,最终生成宿主。 var host = CreateHostBuilder(args).Build(); // 创建可用于解析作用域服务的新 Microsoft.Extensions.DependencyInjection.IServiceScope。 using (var scope = host.Services.CreateScope()) { var services = scope.ServiceProvider; var loggerFactory = services.GetRequiredService <ILoggerFactory>(); try { // 从 system.IServicec提供程序获取 T 类型的服务。 // 数据库连接字符串是在 Model 层的 Seed 文件夹下的 MyContext.cs 中 var configuration = services.GetRequiredService <IConfiguration>(); if (configuration.GetSection("AppSettings")["SeedDBEnabled"].ObjToBool() || configuration.GetSection("AppSettings")["SeedDBDataEnabled"].ObjToBool()) { var myContext = services.GetRequiredService <MyContext>(); var Env = services.GetRequiredService <IWebHostEnvironment>(); DBSeed.SeedAsync(myContext, Env.WebRootPath).Wait(); } } catch (Exception e) { log.Error($"Error occured seeding the Database.\n{e.Message}"); throw; } } // 运行 web 应用程序并阻止调用线程, 直到主机关闭。 // 创建完 WebHost 之后,便调用它的 Run 方法,而 Run 方法会去调用 WebHost 的 StartAsync 方法 // 将Initialize方法创建的Application管道传入以供处理消息 // 执行HostedServiceExecutor.StartAsync方法 // ※※※※ 有异常,查看 Log 文件夹下的异常日志 ※※※※ host.Run(); }
public static void Main(string[] args) { var host = CreateWebHostBuilder(args).Build(); // 创建可用于解析作用域服务的新 Microsoft.Extensions.DependencyInjection.IServiceScope。 using (var scope = host.Services.CreateScope()) { var services = scope.ServiceProvider; var loggerFactory = services.GetRequiredService <ILoggerFactory>(); try { // 从 system.IServicec提供程序获取 T 类型的服务。 // 为了大家的数据安全,这里先注释掉了,大家自己先测试玩一玩吧。 // 数据库连接字符串是在 Model 层的 Seed 文件夹下的 MyContext.cs 中 var configuration = services.GetRequiredService <IConfiguration>(); if (configuration.GetSection("AppSettings")["SeedDBEnabled"].ObjToBool()) { var myContext = services.GetRequiredService <MyContext>(); DBSeed.SeedAsync(myContext).Wait(); } } catch (Exception e) { var logger = loggerFactory.CreateLogger <Program>(); logger.LogError(e, "Error occured seeding the Database."); throw; } } // 运行 web 应用程序并阻止调用线程, 直到主机关闭。 // 创建完 WebHost 之后,便调用它的 Run 方法,而 Run 方法会去调用 WebHost 的 StartAsync 方法 // 将Initialize方法创建的Application管道传入以供处理消息 // 执行HostedServiceExecutor.StartAsync方法 host.Run(); }
public IContainer DICollections() { var basePath = Microsoft.DotNet.PlatformAbstractions.ApplicationEnvironment.ApplicationBasePath; IServiceCollection services = new ServiceCollection(); services.AddAutoMapper(typeof(Startup)); services.AddSingleton(new Appsettings(basePath)); services.AddSingleton(new LogLock(basePath)); services.AddSingleton <IRedisCacheManager, RedisCacheManager>(); services.AddScoped <Blog.Core.Model.Models.DBSeed>(); services.AddScoped <Blog.Core.Model.Models.MyContext>(); //读取配置文件 var symmetricKeyAsBase64 = AppSecretConfig.Audience_Secret_String; var keyByteArray = Encoding.ASCII.GetBytes(symmetricKeyAsBase64); var signingKey = new SymmetricSecurityKey(keyByteArray); var signingCredentials = new SigningCredentials(signingKey, SecurityAlgorithms.HmacSha256); var permission = new List <PermissionItem>(); var permissionRequirement = new PermissionRequirement( "/api/denied", permission, ClaimTypes.Role, Appsettings.app(new string[] { "Audience", "Issuer" }), Appsettings.app(new string[] { "Audience", "Audience" }), signingCredentials, //签名凭据 expiration: TimeSpan.FromSeconds(60 * 60) //接口的过期时间 ); services.AddSingleton(permissionRequirement); //【授权】 services.AddAuthorization(options => { options.AddPolicy(Permissions.Name, policy => policy.Requirements.Add(permissionRequirement)); }); services.AddScoped <SqlSugar.ISqlSugarClient>(o => { return(new SqlSugar.SqlSugarClient(new SqlSugar.ConnectionConfig() { ConnectionString = BaseDBConfig.ConnectionString, //必填, 数据库连接字符串 DbType = (SqlSugar.DbType)BaseDBConfig.DbType, //必填, 数据库类型 IsAutoCloseConnection = true, //默认false, 时候知道关闭数据库连接, 设置为true无需使用using或者Close操作 IsShardSameThread = true, //共享线程 InitKeyType = SqlSugar.InitKeyType.SystemTable //默认SystemTable, 字段信息读取, 如:该属性是不是主键,标识列等等信息 })); }); //实例化 AutoFac 容器 var builder = new ContainerBuilder(); //builder.RegisterType<AdvertisementServices>().As<IAdvertisementServices>(); //指定已扫描程序集中的类型注册为提供所有其实现的接口。 var servicesDllFile = Path.Combine(basePath, "Blog.Core.Services.dll"); var assemblysServices = Assembly.LoadFrom(servicesDllFile); builder.RegisterAssemblyTypes(assemblysServices) .AsImplementedInterfaces() .InstancePerLifetimeScope() .EnableInterfaceInterceptors(); var repositoryDllFile = Path.Combine(basePath, "Blog.Core.Repository.dll"); var assemblysRepository = Assembly.LoadFrom(repositoryDllFile); builder.RegisterAssemblyTypes(assemblysRepository).AsImplementedInterfaces(); //将services填充到Autofac容器生成器中 builder.Populate(services); //使用已进行的组件登记创建新容器 var ApplicationContainer = builder.Build(); var blogservice = ApplicationContainer.Resolve <IBlogArticleServices>(); var myContext = ApplicationContainer.Resolve <MyContext>(); DBSeed.SeedAsync(myContext, basePath).Wait(); return(ApplicationContainer); }