Beispiel #1
0
 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);
     }
 }
Beispiel #2
0
        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);
        }
Beispiel #4
0
        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();
        }
Beispiel #5
0
        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;
            }
        }
Beispiel #6
0
        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();
        }
Beispiel #7
0
        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();
        }
Beispiel #8
0
        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();
        }
Beispiel #9
0
        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();
        }
Beispiel #10
0
        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);
        }