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整個請求過程

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM