.Net Core後端架構實戰【3-介入IOC控制反轉】

来源:https://www.cnblogs.com/zhangnever/archive/2023/06/04/17300230.html
-Advertisement-
Play Games

摘要:基於.NET Core 7.0WebApi後端架構實戰【2-介入IOC控制反轉】 2023/04/09, ASP.NET Core 7.0, VS2022 引言 Inversion of Control,簡稱IOC,即控制反轉。記得當初剛實習的時候公司的帶我的人和我提到過IOC這個概念,當初完 ...


摘要:基於.NET Core 7.0WebApi後端架構實戰【2-介入IOC控制反轉】  2023/04/09, ASP.NET Core 7.0, VS2022

引言

    Inversion of Control,簡稱IOC,即控制反轉。記得當初剛實習的時候公司的帶我的人和我提到過IOC這個概念,當初完全不知道是
啥東西。後來有幸寫了半年Java,SpringBoot裡面業務開發隨處可見IOC。再後來我寫.Net Core用到的第一個框架Blog.Core項目,它里
面IRepository與Repository和IServices與Services,這種解耦的程度單說它貫徹依賴倒置原則是非常nice的!.NetCore時代更加註
重面向介面編程,並且它內置輕量型的IOC容器可幫助我們靈活的進行開發。

依賴註入

Dependency Injection,何為依賴註入?由容器動態的將對象依賴的資源註入到對象之中。假設容器在構造對象A時,對象A的構造依賴對象B、對象C、對象D這些參數,容器會將這些依賴關係自動構造好,最大限度的完成程式的解耦。依賴註入(Dependency Injection,簡稱DI)就是構造A對象時,需要依賴B對象,那麼就先構造B對象作為參數傳遞到A對象,這種對象初始化並註入的技術就叫做依賴註入。

.NetCore本身就集成了一個輕量型的IOC容器,我們可以把程式中的抽象(Interface)或業務類根據需要的生命周期配置到容器中。他不是一次把所有的實例都構造出來,當你在用的時候他才會去構造實例!.NetCore內置的IOC容器只支持構造函數註入!

如下三種生命周期的註入:

Singleton:在第一次被請求的時候被創建,對象的構造函數只會執行一次然後一直會存在記憶體中之後就一直使用這一個實例。如果在多線程中使用了Singleton,要考慮線程安全的問題,保證它不會有衝突。

Scoped:一個請求只創建這一個實例,請求會被當成一個範圍,也就是說單個請求對象的構造函數只會執行一次,同一次請求內註入多次也用的是同一個對象。假如一個請求會穿透應用層、領域層、基礎設施層等等各層,在穿層的過程中肯定會有同一個類的多次註入,那這些多次註入在這個作用域下維持的就是單例。例如工作單元模式就可以藉助這種模式的生命周期來實現,像EF Core的DbContext上下文就被註冊為作用域服務。

Transient:每次請求時都會創建一個新的實例,只要註入一次,構造函數就會執行一次即實例化一次。Scoped、Transient的區別是你在同一個上下文中是否期望使用同一個實例,如果是,用Scoped,反之則使用Transient。


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

-Advertisement-
Play Games
更多相關文章
  • # FileInputStream 和 FileOutputStream ![](https://img2023.cnblogs.com/blog/3008601/202306/3008601-20230604102221520-1382311786.png) - InputStream:位元組輸入流 ...
  • # IO流原理及流的分類 ### 一、Java IO流原理 1. I/O是Input/Output的縮寫,I/O技術是非常實用的技術,用於處理數據傳輸。如讀/寫文件,網路通訊等。 2. Java程式中,對於數據的輸入/輸出操作以”流(stream)“的方式進行。 3. java.io包下提供了各種” ...
  • [模板傳送](https://www.luogu.com.cn/problem/P3369) FHQ-Treap顧名思義就是範浩強大佬設計的一種二叉平衡樹 下麵我們來講一下它的原理和代碼 # 結構體 對於一個節點,我們需要記錄的是 * 對應的值 * 子樹節點數 * 左右孩子編號 * 對應的隨機值 ` ...
  • # 文件的基本使用 ### 一、文件 - **什麼是文件** 文件是保存數據的地方,比如word文檔,txt文件,excel文件……都是文件。即可以保存一張圖片,也可以保持視頻,聲音…… - **文件流** 文件在程式中是以流的形式來操作的 ![文件流](https://img2023.cnblog ...
  • groovy 3.0.7 ### DES加密簡介 加密分為對稱加密和非對稱加密。非對稱加密,加解密使用不同的密鑰,如RSA;對稱加密,加解密使用相同的密鑰,如DES(Data Encryption Standard,即數據加密標準)。相對而言,非對稱加密安全性更高,但是計算過程複雜耗時,一般只應用於 ...
  • # 1.列表切片 前面學習的是如何處理列表的所有數據元素。python還可以處理列表的部分元素,python稱之為切片。 ## 1.1創建切片 創建切片,可指定要使用的第一個數據元素的索引和最後一個數據元素的索引。與range函數一樣,python在到達指定的第二個索引前面的數據元素後停止。比如要輸 ...
  • 本文作者從評判標準、功能評測、性能評測等多方面剖析三方庫哪些家強,並給出了比較務實的建議。 引言 為了小伙伴理解,彙總了一下文章中會提及的術語名詞解釋,請放心品讀,歡迎一起討論交流! 你真的瞭解 Go 標準庫嗎? 問題一:標準庫可以反序列化普通的字元串嗎?執行下麵的代碼會報錯嗎? var s str ...
  • 經過前幾篇文章的講解,初步瞭解ASP.NET Core MVC項目創建,啟動運行,以及命名約定,創建控制器,視圖,模型,接收參數,傳遞數據ViewData,ViewBag,路由,頁面佈局,wwwroot和客戶端庫,Razor語法,EnityFrameworkCore與資料庫,HttpContext,... ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...