一個(gè)ASP.NET Core應(yīng)用被啟動(dòng)之后就具有了針對(duì)請(qǐng)求的處理能力,而這個(gè)能力是由管道賦予的,所以應(yīng)用的啟動(dòng)同時(shí)意味著管道的成功構(gòu)建。由于管道是由注冊(cè)的服務(wù)器和若干中間件構(gòu)成的,所以應(yīng)用啟動(dòng)過程中一個(gè)核心的工作就是完成中間節(jié)的注冊(cè)。由于依賴注入在ASP.NET Core應(yīng)用這得到非常廣泛的應(yīng)用,框架絕大部分的工作都會(huì)分配給我們預(yù)先注冊(cè)的服務(wù),所以服務(wù)注冊(cè)也是啟動(dòng)WebHost過程的另一項(xiàng)核心工作。這兩項(xiàng)在啟動(dòng)過程中必須完成的核心工作通過一個(gè)名為Startup的對(duì)象來承載。 [本文已經(jīng)同步到《ASP.NET Core框架揭秘》之中]
目錄
一、 DelegateStartup
二、ConventionBasedStartup
StartupMethods
StartupLoader
如何選擇啟動(dòng)類型
如何選擇服務(wù)注冊(cè)方法和中間件注冊(cè)方法
StartupMethods對(duì)象的創(chuàng)建
UseStartup方法究竟做了些什么?
三、選擇哪一個(gè)Startup
這里所謂的Startup實(shí)際上是對(duì)所有實(shí)現(xiàn)了IStartup接口的所有類型以及對(duì)應(yīng)對(duì)象的統(tǒng)稱。如下面的代碼片段所示,服務(wù)注冊(cè)由ConfigureServices方法來實(shí)現(xiàn),它返回一個(gè)ServiceProvider對(duì)象,至于另一個(gè)方法Configure則負(fù)責(zé)完成中間件的注冊(cè),方法輸入?yún)?shù)是一個(gè)ApplicationBuilder對(duì)象。
1: public interface IStartup
2: {
3: IServiceProvider ConfigureServices(IServiceCollection services);
4: void Configure(IApplicationBuilder app);
5: }
IStartup接口所在的NuGet包中還定義了另一個(gè)實(shí)現(xiàn)了這個(gè)接口的抽象類StartupBase。如下面的代碼片段所示,StartupBase實(shí)現(xiàn)了抽象方法ConfigureServices,該方法直接利用提供的ServiceCollection對(duì)象創(chuàng)建返回的ServiceProvider。換句話說,派生于StartupBase的Startup類型如果沒用重寫ConfigureServices方法,它們實(shí)際上只關(guān)心中間件的注冊(cè),而不需要注冊(cè)額外的服務(wù)。
延伸閱讀
- ssh框架 2016-09-30
- 阿里移動(dòng)安全 [無線安全]玩轉(zhuǎn)無線電——不安全的藍(lán)牙鎖 2017-07-26
- 消息隊(duì)列NetMQ 原理分析4-Socket、Session、Option和Pipe 2024-03-26
- Selective Search for Object Recognition 論文筆記【圖片目標(biāo)分割】 2017-07-26
- 詞向量-LRWE模型-更好地識(shí)別反義詞同義詞 2017-07-26
- 從棧不平衡問題 理解 calling convention 2017-07-26
- php imagemagick 處理 圖片剪切、壓縮、合并、插入文本、背景色透明 2017-07-26
- Swift實(shí)現(xiàn)JSON轉(zhuǎn)Model - HandyJSON使用講解 2017-07-26
- 阿里移動(dòng)安全 Android端惡意鎖屏勒索應(yīng)用分析 2017-07-26
- 集合結(jié)合數(shù)據(jù)結(jié)構(gòu)來看看(二) 2017-07-26
