書接上文:上一節中,我們已經實作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 }
View Code
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 }
View Code
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 }
View Code
後期我們的架構逐漸的增加日志,身份驗證,異常處理的時候,都會用到中間件。是以說,對于NetCore 項目來說,這還是很重要的一環。
這一節本來想簡單說一下理論性的東西的,但是不知不覺寫了這麼多。是以把這部分内容分為兩節來寫吧。
3.WebAPI 的路由、4.依賴注入、5.異步程式設計 還說留給下一節吧。
最後:老張釋出了Blog.Core 開發社之招募計劃書 (https://www.cnblogs.com/laozhang-is-phi/p/11603456.html) 有實力的小夥伴抓緊報名啊!
最最後:公司技術轉型,近期考慮換工作中。。
轉載于:https://www.cnblogs.com/xuzhencheng/p/11578521.html