1. 程式人生 > >.net core Web應用啟動類

.net core Web應用啟動類

在ASP.NET Core中,Startup類為Web應用的入口類,用於配置Web服務的管道/過濾器以及Web應用所能用到的服務。在啟動Web應用後,ASP.NET將在主庫中查詢名為Startup的類,無論查詢到的Startup類的訪問限制是什麼,ASP.NET Core將直接載入該類並執行後續的操作。ASP.NET的查詢方式為首先查詢主庫中的根名稱空間,根名稱空間中不包含Startup類,則根據字典序查詢剩餘的名稱空間,並載入第一個找到的Startup類。(這一段存疑)

Startup類參照依賴注入(Dependency Injection)設計模式實現。在Startup類中所依賴的物件,可以通過Startup

類的構造方法注入到類內。依照規定,Startup類中必須包含Configure方法,可以定義ConfigureServices方法。

0x00 Startup類中依賴的物件所在容器在哪兒?

首先,要說明OWIN所定義的層次模型。

  1. Host層,用於配置程式以及啟動程序。
  2. Server層,用於提供HTTP Server,配置Middleware以及相應服務。
  3. Middleware層
  4. Application層

這裡我們不關注Middleware以及Application層所要負責哪些東西,僅關注Host和Server層。 我們可以發現,Host層中所實現的內容,在Program.Main方法中實現,同時這個方法也是真正程式的入口。而Server層就是我們現在所論及的Startup

類中的東西了,那很容易就能明白,注入到Startup類中的物件,原來所處的容器應該是在Host層中。我們進一步去觀察Program.cs檔案中的內容

public static void Main(string[] args)  
{  
    var host = new WebHostBuilder()  
        .UseKestrel()  
        .UseContentRoot(Directory.GetCurrentDirectory())  
        .UseIISIntegration()  
        .UseStartup<Startup>()  
        .Build();  
    host.Run()  
}

程式碼中不能發現其容器所在,而在IWebBuilder介面中(即host的型別)是如下定義的

public interface IWebHost : IDisposable  
{  
    IFeatureCollection ServerFeatures { get; }  
    IServiceProvider Services { get; }  
    void Start();  
}

很顯然地,Services便是我們要找的依賴物件容器。

0x01 Configure方法

該方法便是用於安排佈置在管道中過濾器的順序的方法。配置過濾器必須要使用IApplicationBuilder的例項,該例項同樣是通過依賴注入的方法進入到Configure方法中使用的。因此Configure方法必須攜帶一個IApplicationBuilder引數。因為是依賴注入,如果有需要,還可以再新增。

在本方法中,以Use開頭的方法均是在管道中新增一個過濾器。

0x02 ConfigureServices方法

Startup方法中,可以有選擇的新增該方法,該方法用於配置應用所能使用的服務,這裡同樣是使用了依賴注入的設計模式,ConfigureServices中的內容就是在裝填應用所依賴的服務容器。