一個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ù)。
延伸閱讀
- ssh框架 2016-09-30
- 阿里移動安全 [無線安全]玩轉(zhuǎn)無線電——不安全的藍(lán)牙鎖 2017-07-26
- 消息隊列NetMQ 原理分析4-Socket、Session、Option和Pipe 2024-03-26
- Selective Search for Object Recognition 論文筆記【圖片目標(biāo)分割】 2017-07-26
- 詞向量-LRWE模型-更好地識別反義詞同義詞 2017-07-26
- 從棧不平衡問題 理解 calling convention 2017-07-26
- php imagemagick 處理 圖片剪切、壓縮、合并、插入文本、背景色透明 2017-07-26
- Swift實現(xiàn)JSON轉(zhuǎn)Model - HandyJSON使用講解 2017-07-26
- 阿里移動安全 Android端惡意鎖屏勒索應(yīng)用分析 2017-07-26
- 集合結(jié)合數(shù)據(jù)結(jié)構(gòu)來看看(二) 2017-07-26