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


上節中,我們初步的介紹了一下NetCore的一些基礎知識,為了控制篇幅(其實也是因為偷懶),我將NetCore 基礎分為兩部分來寫。

0.WebAPI 項目的建立

1..NetCore 項目執行(加載)過程

2.中間件的執行過程

3.WebAPI 的路由

4.依賴注入

5.異步編程

上一節中,我把0,1,2 這三部分說完了。

這一節中我們繼續來講剩下的部分。

3.WebAPI 的路由

路由有兩種方式: Convention-based (按約定), attribute-based(基於路由屬性配置的). 

其中convention-based (基於約定的) 主要用於MVC (返回View或者Razor Page那種的).

Web api 推薦使用attribute-based. 

                          --以上內容引用自老張的博客

我們現在的框架是基於WebApi 的,所以就着重說一下attribute-based. 

   這種基於屬性配置的路由可以配置Controller或者Action級別, uri會根據Http method然后被匹配到一個controller里具體的action上.

4.依賴注入

DI在.NET Core里面被提到了一個非常重要的位置。但到底依賴注入是什么? 為什么要用它? 控制反轉IOC(Iversion of Control),DI等概念到底該怎么理解?

下面的內容引用自:https://www.cnblogs.com/jesse2013/p/di-in-aspnetcore.html

首先是依賴,

 

 

其次是注入:

 

接下來是反轉:

 

 

最后是容器:

 

 

 

我們接下來看看在控制台中對.NET Core DI的應用。在.NET Core中DI的核心分為兩個組件:IServiceCollection和 IServiceProvider。
  • IServiceCollection 負責注冊
  • IServiceProvider 負責提供實例
通過默認的 ServiceCollection(在Microsoft.Extensions.DependencyInjection命名空間下)有三個方法:
var serviceCollection = new ServiceCollection()
  .AddTransient<ILoginService, EFLoginService>()
  .AddSingleton<ILoginService, EFLoginService>()
  .AddScoped<ILoginService, EFLoginService>();

這三個方法都是將我們的實例注冊進去,只不過實例的生命周期不一樣。

  • Transient: 每一次GetService都會創建一個新的實例
  • Scoped:  在同一個Scope內只初始化一個實例 ,可以理解為( 每一個request級別只創建一個實例,同一個http request會在一個 scope內)
  • Singleton :整個應用程序生命周期以內只創建一個實例 
如果在Mvc中用過Autofac的InstancePerRequest的同學就知道,有一些對象在一個請求跨越多個Action或者多個Service、Repository的時候,比如最常用的DBContext它可以是一個實例。即能減少實例初始化的消耗,還能實現跨Service事務的功能。(注:在ASP.NET Core中所有用到EF的Service 都需要注冊成Scoped )
 
而實現這種功能的方法就是在整個reqeust請求的生命周期以內共用了一個Scope。
 
具體的應用,我會在框架搭建的時候,為大家舉例說明。

5.異步編程

在這里我想着重介紹一下 async 和 await 關鍵字

一下內容引用自微軟官網:https://docs.microsoft.com/zh-cn/dotnet/csharp/programming-guide/concepts/async/index

 

 

 

 按照上面例子中的,當多個任務並行的時候,我們一般采用異步的方式來進行,但是如果個別任務是需要一定的先決條件的時候,我們就可以采用await 關鍵詞來進行修飾,

await 關鍵字提供了一種非阻塞方式來啟動任務,然后在此任務完成時繼續執行。

在煎雞蛋或培根時,此代碼不會阻塞。 不過,此代碼也不會啟動任何其他任務。 你還是會將面包放進烤面包機里,然后盯着烤面包機直到面包彈出。 但至少,你會回應任何想引起你注意的人。 在接受了多份訂單的一家餐館里,廚師可能會在做第一份早餐的同時開始制作另一份早餐。

 

--以上,.netCore 的基礎知識部分,就介紹 的差不多了。(雖然大部分內容都是在別的地方引用過來的。也算是給大家做一個整理吧)

接下來的,終於又可以繼續搭建的我們的技術框架了!有了DI,有了await ,async.看看我們的框架可以引入哪些新的內容吧?

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM