ASP.NET Core学习(一):启动顺序

ASP.NET Core应用程序,其本质上是一个独立的控制台应用,它并不是必须在IIS内部托管且并不需要IIS来启动运行(而这正是ASP.NET Core跨平台的基石)。
ASP.NET Core应用程序拥有一个内置的Self-Hosted(自托管)的Web Server(Web服务器),用来处理外部请求。
不管是托管还是自托管,都离不开Host(宿主)。在ASP.NET Core应用中通过配置并启动一个Host来完成应用程序的启动和其生命周期的管理(如下图所示)。而Host的主要的职责就是Web Server的配置和Pilpeline(请求处理管道)的构建。

 

 

通过上图可以看出,ASP.NET Core应用程序的启动主要包含三个步骤:
1.CreateDefaultBuilder():创建IWebHostBuilder
2.Build():IWebHostBuilder负责创建IWebHost
3.Run():启动IWebHost
所以,ASP.NET Core应用的启动本质上是启动作为宿主的WebHost对象
 
用vs创建一个.net core项目后,我们从Program 类中可以看到以下代码:
 public class Program
    {
        public static void Main(string[] args)
        {
            CreateHostBuilder(args).Build().Run();
        }

        public static IHostBuilder CreateHostBuilder(string[] args)=> 
            Host.CreateDefaultBuilder(args)//开启一个默认的通用主机Host建造者
                .ConfigureAppConfiguration(bulider =>
                {
                    Console.WriteLine("ConfigureAppConfiguration");
                })
                .ConfigureServices(service =>
                {
                    Console.WriteLine("ConfigureServices");
                })
                .ConfigureLogging(sevice =>
                {
                    Console.WriteLine("ConfigureLogging");
                })
                .ConfigureHostConfiguration(service =>
                {
                    Console.WriteLine("ConfigureHostConfiguration");
                })
                .ConfigureWebHostDefaults(webBuilder =>
                {
                    Console.WriteLine("ConfigureWebHostDefaults");
                    webBuilder.UseStartup<Startup>();
                });
    }
}

  

通过打印内容,可以看出执行顺序如下:
1.ConfigureWebHostDefaults:注册应用程序必要的几个组件如配置,容器等组件
2.ConfigureHostConfiguration:配置应用程序启动时必要的组件,比如端口,URL等,可以配置我们的内容注册到框架里面
3.ConfigureAppConfiguration:嵌入我们自己的配置文件,供应用程序来读取,这些配置文件可以在将来的程序运行过程中读取
4.ConfigureServices
5.ConfigureLogging
6.Startup
7.Startup.ConfigureServices:以上几个都是往容器里注入我们的应用组件
8.Startup.Configure:注入我们的中间件,处理HttpContext整个请求过程

 

 

posted @ 2020-03-14 20:39  王立新  阅读(1175)  评论(0编辑  收藏  举报