書接上文:上一節中,我們已經實現Services 層。(https://www.cnblogs.com/xuzhencheng/p/11424751.html)
但是具體要如何將服務依賴注入進來呢?繼續來續寫我學習筆記!這節中更多的是關於NetCore 的一些基礎知識。如果基礎不錯的小伙伴,可以略過!
正文:
看過之前博客的同學們應該對下面這張圖不陌生:

圖中,紅色標記的,基本上都是NetCore 自帶的。包括Nlog,算是net Core涉及到的語法糖。
這一節中,我將從下面幾個方面對NetCore 的技術點進行說明。園子里對netCore 的講解其實很多,我的側重點在於結合我們現在要搭建的開發框架。進行相應的說明:
0.WebAPI 項目的建立
1..NetCore 項目執行(加載)過程
2.中間件的執行過程
3.WebAPI 的路由
4.依賴注入
5.異步編程
---------------------------------------------------------假裝的分割線------------------------------------------------------------------------------
0. web API項目的建立
這部分內容,其實沒什么太多可說的,最最基礎的了。我就默認大家都會了。
不過還說有要說明的一點,隨着Core3.0 的發布,可能有部分同學,想新建自己基於NetCore3.0 的項目。在大家去下載skd 的時候,可以看到微軟的提示,要求VS更新到V16.3 以上。

然后,打開自己的VS,檢查更新,執行更新操作就行了。

更新好VS2019 之后,就是下載下載,並安裝netCore skd 了,大家都是成年人了,這個地方我就不占用篇幅進行介紹了。
需要說明的是,我現在的示例項目還是基於netcore 2.2 進行構建的。后期的時候,會單獨出一片2.2 升級 3.0 的文章(其實網上已經很多了。。)
接下來就是新建項目的流程,這個部分我就不一一截圖展示了。
1..NetCore 項目執行(加載)過程
接下來我們把精力集中在這一節,我個人認為這部分算得上是NetCore 的核心,也是對比.netFreamwork 來說,改變比較大的。
下面這張圖,是我在園子里找的,FlyLolo 的博客里。https://www.cnblogs.com/FlyLolo/p/ASPNETCore2_5.html (也是一個介紹NetCore 的系列,有興趣同學可以看一下。講的很好。)
.
首先是程序起點,拿我們所建的Web API 工程來說,程序起點已經不再是Global.asax文件也沒有了Application_Start() 方法,而是統一了Program.cs文件中的 Main() 函數作為程序入口。

在CreateWebHostBuilder方法中,創建並配置WebHostBuilder: 首先調用CreateDefaultBuilder( 它是一系列配置的大綜合), 進行一系列配置之后, 調用 UseStartup<T>()
在CreateDefaultBuilder這里,我的理解是這樣的,NetCore 項目的運行,我們可以在這個地方引用一些它內置的一些東西。比如像UseKestrel、UseIISIntegration、UseConfiguration等下。像下圖這樣:

但是除了NetCore 框架里面自帶的這些東西以外 呢,我們可能還需要引入一些比如像Mvc、EF、Swagger等其他的一些第三方的庫也好,框架也好。
那這部分內容我們怎么辦呢?就是在UseStartup<T>()這里來做配置和引用了。也就是Startup.cs 。

在這里,除了構造函數以外,還有兩個方法,一個是ConfigureServices、一個是Configure。看英文注釋已經說的很明白了。都是在runtime 到時候會被調用。
區別是,ConfigureServices是用來做依賴注入的,在這里我們可以通過依賴注入的方式,add sercices

Configure呢,是用來配置HTTP request 管道的。

以上這些,就是我對NetCore 的加載過程的一些理解,可能有所偏差。但能力有限。希望大家可以發表自己的看法,對我所說的做一些修正。
2.中間件的執行過程

這一張圖,我覺得對中間件,基本上對中間件的執行過程做了一個很好的說明。但是提到中間件,就不得不提一下過濾器(Filter)
同作為兩個AOP利器,過濾器更貼合業務,它關注於應用程序本身,比如你看ActionFilter 和 ResultFilter,它都直接和你的Action,ActionResult交互了,是不是離你很近的感覺,那我有一些比如對我的輸出結果進行格式化啦,對我的請求的ViewModel進行數據驗證啦,肯定就是用Filter無疑了。它是MVC的一部分,它可以攔截到你Action上下文的一些信息,而中間件是沒有這個能力的。
那么,何時使用中間件呢?我的理解是在我們的應用程序當中和業務關系不大的一些需要在管道中做的事情可以使用,比如身份驗證,Session存儲,日志記錄等。其實我們的 asp.net core項目中本身已經包含了很多個中間件。
整個中間件的創建和使用,我找了一個別人的例子:(https://www.cnblogs.com/haosit/p/7754257.html)
1.1 必須有一個RequestDelegate 委托用了進入一個中間件
1.2 通過構造函數設置這個RequestDelegate委托
1.3 必須有一個方法Task Invoke,在這個方法里編寫中間件內容最后執行RequestDelegate委托
1 using Microsoft.AspNetCore.Http; 2 using System; 3 using System.Collections.Generic; 4 using System.Linq; 5 using System.Threading.Tasks; 6 7 namespace Haos.Develop.CoreTest 8 { 9 public class TestMiddleware 10 { 11 protected RequestDelegate Next; 12 13 /// <summary> 14 /// 參數 15 /// </summary> 16 public string Str { get; set; } 17 18 public TestMiddleware(RequestDelegate next,string s) 19 { 20 Next = next; 21 Str = s; 22 } 23 24 public virtual Task Invoke(HttpContext context) 25 { 26 context.Response.WriteAsync("this is test string"); 27 return Next(context); 28 } 29 } 30 }
2.編寫一個擴展方法用來添加到程序中
1 using Haos.Develop.CoreTest.Service; 2 using Microsoft.AspNetCore.Builder; 3 using Microsoft.Extensions.DependencyInjection; 4 using System; 5 using System.Collections.Generic; 6 using System.Linq; 7 using System.Threading.Tasks; 8 9 namespace Haos.Develop.CoreTest 10 { 11 public static class Extension 12 { 13 public static IApplicationBuilder UserTestMiddleWare(this IApplicationBuilder app, string str) 14 { 15 return app.UseMiddleware<TestMiddleware>(str); 16 } 17 } 18 }
3.在Startup添加中間件
1 public void Configure(IApplicationBuilder app, IHostingEnvironment env) 2 { 3 if (env.IsDevelopment()) 4 { 5 app.UseDeveloperExceptionPage(); 6 } 7 //擴展方式添加 8 app.UserTestMiddleWare("this is test param"); 9 //直接添加中間件方式 10 app.Use((context, next) => 11 { 12 context.Response.WriteAsync("this is test"); 13 return next(); 14 }); 15 }
后期我們的框架逐漸的增加日志,身份驗證,異常處理的時候,都會用到中間件。所以說,對於NetCore 項目來說,這還是很重要的一環。
這一節本來想簡單說一下理論性的東西的,但是不知不覺寫了這么多。所以把這部分內容分為兩節來寫吧。
3.WebAPI 的路由、4.依賴注入、5.異步編程 還說留給下一節吧。
最后:老張發布了Blog.Core 開發社之招募計划書 (https://www.cnblogs.com/laozhang-is-phi/p/11603456.html) 有實力的小伙伴抓緊報名啊!
