一個ASP.NET Core應(yīng)用被啟動之后就具有了針對請求的處理能力,而這個能力是由管道賦予的,所以應(yīng)用的啟動同時意味著管道的成功構(gòu)建。由于管道是由注冊的服務(wù)器和若干中間件構(gòu)成的,所以應(yīng)用啟動過程中一個核心的工作就是完成中間節(jié)的注冊。由于依賴注入在ASP.NET Core應(yīng)用這得到非常廣泛的應(yīng)用,框架絕大部分的工作都會分配給我們預(yù)先注冊的服務(wù),所以服務(wù)注冊也是啟動WebHost過程的另一項核心工作。這兩項在啟動過程中必須完成的核心工作通過一個名為Startup的對象來承載。 [本文已經(jīng)同步到《ASP.NET Core框架揭秘》之中]

目錄

一、 DelegateStartup
二、ConventionBasedStartup
    StartupMethods
    StartupLoader
    如何選擇啟動類型
    如何選擇服務(wù)注冊方法和中間件注冊方法
    StartupMethods對象的創(chuàng)建
    UseStartup方法究竟做了些什么?
三、選擇哪一個Startup

這里所謂的Startup實際上是對所有實現(xiàn)了IStartup接口的所有類型以及對應(yīng)對象的統(tǒng)稱。如下面的代碼片段所示,服務(wù)注冊由ConfigureServices方法來實現(xiàn),它返回一個ServiceProvider對象,至于另一個方法Configure則負(fù)責(zé)完成中間件的注冊,方法輸入?yún)?shù)是一個ApplicationBuilder對象。

 1: public interface IStartup
 2: {
 3: IServiceProvider ConfigureServices(IServiceCollection services);
 4: void Configure(IApplicationBuilder app);
 5: }

IStartup接口所在的NuGet包中還定義了另一個實現(xiàn)了這個接口的抽象類StartupBase。如下面的代碼片段所示,StartupBase實現(xiàn)了抽象方法ConfigureServices,該方法直接利用提供的ServiceCollection對象創(chuàng)建返回的ServiceProvider。換句話說,派生于StartupBase的Startup類型如果沒用重寫ConfigureServices方法,它們實際上只關(guān)心中間件的注冊,而不需要注冊額外的服務(wù)。