zoukankan      html  css  js  c++  java
  • asp.net core 3.1 CreateDefaultBuilder默认启动解析

    源代码

            /// <summary>
            /// Initializes a new instance of the <see cref="HostBuilder"/> class with pre-configured defaults.
            /// </summary>
            /// <remarks>
            ///   The following defaults are applied to the returned <see cref="HostBuilder"/>:
            ///   <list type="bullet">
            ///     <item><description>设置 <see cref="P:Microsoft.Extensions.Hosting.IHostEnvironment.ContentRootPath"/> 到 <see cref="M:System.IO.Directory.GetCurrentDirectory"/> 的结果</description></item>
            ///     <item><description>从带有前缀的环境变量“DOTNET_”加载主机 <see cref="IConfiguration"/></description></item>
            ///     <item><description>从提供的命令行参数加载主机的 <see cref="IConfiguration"/></description></item>
            ///     <item><description>load app <see cref="IConfiguration"/> from 'appsettings.json' and 'appsettings.[<see cref="IHostEnvironment.EnvironmentName"/>].json'</description></item>
            ///     <item><description>load app <see cref="IConfiguration"/> from User Secrets when <see cref="IHostEnvironment.EnvironmentName"/> is 'Development' using the entry assembly</description></item>
            ///     <item><description>load app <see cref="IConfiguration"/> from environment variables</description></item>
            ///     <item><description>load app <see cref="IConfiguration"/> from supplied command line args</description></item>
            ///     <item><description>configure the <see cref="ILoggerFactory"/> to log to the console, debug, and event source output</description></item>
            ///     <item><description>在依赖项注入容器上启用范围验证,当 <see cref="P:Microsoft.Extensions.Hosting.IHostEnvironment.EnvironmentName"/> 值为 'Development'</description></item>
            ///   </list>
            /// </remarks>
            /// <param name="args">The command line args.</param>
            /// <returns>The initialized <see cref="IHostBuilder"/>.</returns>
            public static IHostBuilder CreateDefaultBuilder(string[] args)
            {
                var builder = new HostBuilder();
                //1.UseContentRoot 指定主机指定的根目录
                builder.UseContentRoot(Directory.GetCurrentDirectory()); 
                //2.设置环境变量
                builder.ConfigureHostConfiguration(config =>
                {
                    config.AddEnvironmentVariables(prefix: "DOTNET_");
                    if (args != null)
                    {
                        config.AddCommandLine(args);
                    }
                });
                
                //3.配置json文件
                builder.ConfigureAppConfiguration((hostingContext, config) =>
                {
                    var env = hostingContext.HostingEnvironment;
    
                    config.AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
                          .AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true, reloadOnChange: true);
    
                    if (env.IsDevelopment() && !string.IsNullOrEmpty(env.ApplicationName))
                    {
                        var appAssembly = Assembly.Load(new AssemblyName(env.ApplicationName));
                        if (appAssembly != null)
                        {
                            config.AddUserSecrets(appAssembly, optional: true);
                        }
                    }
    
                    config.AddEnvironmentVariables();
    
                    if (args != null)
                    {
                        config.AddCommandLine(args);
                    }
                })
                .ConfigureLogging((hostingContext, logging) =>      //4.配置日志
                {
                    var isWindows = RuntimeInformation.IsOSPlatform(OSPlatform.Windows);
    
                    // IMPORTANT: This needs to be added *before* configuration is loaded, this lets
                    // the defaults be overridden by the configuration.
                    if (isWindows)
                    {
                        // Default the EventLogLoggerProvider to warning or above
                        logging.AddFilter<EventLogLoggerProvider>(level => level >= LogLevel.Warning);
                    }
    
                    logging.AddConfiguration(hostingContext.Configuration.GetSection("Logging"));
                    logging.AddConsole();
                    logging.AddDebug();
                    logging.AddEventSourceLogger();
    
                    if (isWindows)
                    {
                        // Add the EventLogLoggerProvider on windows machines
                        logging.AddEventLog();
                    }
                })
                .UseDefaultServiceProvider((context, options) =>        //5.启用范围验证,EnvironmentName值为'Development'
                {
                    var isDevelopment = context.HostingEnvironment.IsDevelopment();
                    options.ValidateScopes = isDevelopment;
                    options.ValidateOnBuild = isDevelopment;
                });
    
                return builder;
            }
        }
    
  • 相关阅读:
    软件质量保证(SQA)
    软件质量保证(SQA)
    在应用程序中使用 Ajax 的时机
    3月18日工作日志88250
    Eclipse 4.0计划
    3月15日工作日志88250
    Eclipse 4.0计划
    3月18日工作日志88250
    在应用程序中使用 Ajax 的时机
    3月15日工作日志88250
  • 原文地址:https://www.cnblogs.com/tangge/p/13956487.html
Copyright © 2011-2022 走看看