.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所定義的層次模型。
- Host層,用於配置程式以及啟動程序。
- Server層,用於提供HTTP Server,配置Middleware以及相應服務。
- Middleware層
- 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
中的內容就是在裝填應用所依賴的服務容器。