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

来源:https://www.cnblogs.com/xuzhencheng/archive/2019/10/16/11611340.html
-Advertisement-
Play Games

上節中,我們初步的介紹了一下NetCore的一些基礎知識,為了控制篇幅(其實也是因為偷懶),我將NetCore 基礎分為兩部分來寫。 0.WebAPI 項目的建立 1..NetCore 項目執行(載入)過程 2.中間件的執行過程 3.WebAPI 的路由 4.依賴註入 5.非同步編程 上一節中,我把0 ...


上節中,我們初步的介紹了一下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.看看我們的框架可以引入哪些新的內容吧?

 

 

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 問題: 已知excel表格前面26個是a到z,27是aa28是ab,以此類推,N是多少 代碼: 效果: ...
  • 類: 類是一個能存儲數據並執行代碼的數據結構。 類是邏輯相關的數據和函數的封裝,通常代表現實中或概念上的事物。 類的關鍵字:class 類的主要成員類型有:欄位:方法。 欄位: 欄位是屬於類的變數。 預設修飾符為private。 每種類型的預設值都是0;bool型為false;引用類型為null。 ...
  • 使用Quqrtz.Net實現定時發送郵件,註意郵箱要開通Smtp服務 ...
  • public void WriteLog(string strLog) { string sFilePath = AppDomain.CurrentDomain.BaseDirectory + "Log"; string sFileName = DateTime.Now.ToString("yyyy ...
  • 在 windows server 2008 r2 版本操作系統上安裝 vs2017 經常出現下載進度條結束後沒有任何反應問題,一般是因為安裝程式相容性造成的,解決方案如下: 將 C:\Program Files (x86)\Microsoft Visual Studio\Installer\vs_i ...
  • .NET和c#: .NET是一個框架,一般稱.net Framework。 c#是一個.NET框架下的編程語言。 縮寫: 程式集: CIL(Common Intermediate Language,公共中間語言):程式集里的執行代碼。其他術語:IL(Intermediate Language)和MS ...
  • #region 添加有效性 DataTable dt = LAbll.LogisticsAccounts(DeptId); //查數據 if (dt.Rows.Count < 20) //有效性字元限制255,一組字元12加分割符=13 { string[] strs = {}; for (int ...
  • 在日常開發過程中,難免有這樣一種需求:就是你所建的每一個類文件或者介面文件都需要標註下作者姓名以及類的用途。如果我們每次創建文件的時候都需要寫一遍這些信息是很煩神的。還好Visual Studio給我們提供了模板註釋的功能來自動幫我們生成類似的註釋代碼。今天趁著中午休息的時間就讓我們一起來操作下吧。 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...