1. 程式人生 > >.netCore+Vue 搭建的簡捷開發框架 (4)--NetCore 基礎

.netCore+Vue 搭建的簡捷開發框架 (4)--NetCore 基礎

書接上文:上一節中,我們已經實現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: 首先呼叫Create­DefaultBuilder( 它是一系列配置的大綜合), 進行一系列配置之後, 呼叫 UseStartup<T>()

  在Create­DefaultBuilder這裡,我的理解是這樣的,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) 有實力的小夥伴抓緊報名啊!

 

最最後:還是要招聘,三線城市的.net 程式設計師太難招了! 三年以上.net 開發,發郵件到[email protected] .地點:瀋陽

&n