欢迎光临
个人技术文档整理

.NET Core的启动流程

启动执行顺序

1、-------开始--------
2、-------ConfigureWebHostDefaults------ -
3、-------ConfigureHostConfiguration------ -
4、-------ConfigureAppConfiguration------ -
5、-------Startup-- > 构造函数--------
6、-------Startup-- > --ConfigureServices--------
7、-------ConfigureServices------ -
8、-------ConfigureLogging------ -
9、-------Startup-- > ---Configure--------

 

    public class Program
    {
        public static void Main(string[] args)
        {
            Console.WriteLine("\r\n");

            Console.WriteLine("1、-------开始--------");
            var hostBuilder = Host.CreateDefaultBuilder(args);

            hostBuilder.ConfigureWebHostDefaults(webBuilder =>
            {
                //一般是配置组件和容器的组件
                Console.WriteLine("2、-------ConfigureWebHostDefaults-------");
                webBuilder.UseStartup<Startup>();

            });

            hostBuilder.ConfigureHostConfiguration(webBuilder =>
            {
                //用来配置HostBuilder的builder过程所用到的配置的。
                Console.WriteLine("3、-------ConfigureHostConfiguration-------");
            });

            hostBuilder.ConfigureAppConfiguration((hostContext, configurationBuilder) =>
            {
                //嵌入自己的配置文件供应用程序来读取。
                Console.WriteLine("4、-------ConfigureAppConfiguration-------");

            });

            hostBuilder.ConfigureServices((hostContext, services) =>
            {  //往容器里面注入应用组件
                Console.WriteLine("7、-------ConfigureServices-------"); 
            });

            hostBuilder.ConfigureLogging(logging =>
            { //注入日志组件
                Console.WriteLine("8、-------ConfigureLogging-------");
            });

            Console.WriteLine("------结束--------");

            hostBuilder.Build().Run();

            Console.WriteLine("------不执行--------");
             
        }
    }
    public class Startup
    {
        public Startup()
        {
            Console.WriteLine("5、-------Startup-->构造函数--------");
        }

        public void ConfigureServices(IServiceCollection services)
        {
            Console.WriteLine("6、-------Startup-->--ConfigureServices--------");
        }
        public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
        {
            Console.WriteLine("9、-------Startup-->---Configure--------\r\n\r\n");
        }
    }

 

 

  • ConfigureWebHostDefaults:注册应用程序必要组件   比如 配置 ,容器的组件
                hostBuilder.ConfigureWebHostDefaults(webBuilder =>
                {
                    //一般是配置组件和容器的组件 
                    webBuilder.UseStartup<Startup>();
                    webBuilder.UseUrls("http://localhost:5000");
    
                });

     

  • ConfigureHostConfiguration:用来配置应用程序启动时必要的配置  比如 应用程序启动时需要监听的窗口,监听的URL地址, 在这个过程我们可以嵌入我们自己配置的内容
  • ConfigureAppConfiguration:让我们来嵌入我们自己的配置文件,供应用程序读取,这些配置将来就会在后续的应用程序执行过程中间每个组件读取
    //加载 指定的 json配置
    configurationBuilder.AddJsonFile("Configuration/Database.json", optional: true, reloadOnChange: true);
    

     

  • ConfigureServices:往容器里面注入应用组件
                hostBuilder.ConfigureServices((hostContext, services) =>
                {  //往容器里面注入应用组件 
                    // 注册 HttpContextAccessor 服务
                    services.AddHttpContextAccessor();
    
                });

     

  • ConfigureLogging:注入日志组件
                hostBuilder.ConfigureLogging(logging =>
                {   //注入日志组件
                    Console.WriteLine("8、-------ConfigureLogging-------");
                    logging.ClearProviders();//移除已经注册的其他日志处理程序
                    logging.AddConsole(); //添加一个 Console 日志记录提供程序,以便在控制台中查看应用程序的日志记录信息。
                    logging.AddDebug();
                    logging.AddJsonConsole();// 方法添加一个 JSON 格式的日志记录提供程序,以便在 ELK 等日志分析工具中分析日志记录。
                    logging.SetMinimumLevel(LogLevel.Trace); //设置最小的日志级别
                });

     

  • Startup.ConfigureServices :注入一些服务组件
    services.AddControllersWithViews();
    services.AddSwaggerGen();
    services.AddHttpContextAccessor();//注册 HttpContextAccessor 服务

     

  • Startup.Configure:注入我们的中间件到处理过程中间去 ,处理HttpContext整个的请求过程
    app.UseSwagger();
    app.UseSwaggerUI();
    app.UseStaticFiles();
    app.UseAuthorization();

     

赞(1)