目錄
為什麼使用依賴注入?
內置DI如何在ASP.NET核心中起作用?
服務壽命:瞬態,範圍
當不使用內置DI容器時
首頁 後端開發 C#.Net教程 什麼是依賴性注入(DI),如何在C#中實現(例如,在ASP.NET Core中使用內置DI)?

什麼是依賴性注入(DI),如何在C#中實現(例如,在ASP.NET Core中使用內置DI)?

Jun 30, 2025 am 02:06 AM
依賴注入 c#

C#中的依賴注入(DI)是一種設計模式,通過允許類在外部接收依賴性來增強模塊化,可檢驗性和可維護性。 1。 DI通過將對象創建與用法解耦來促進鬆散的耦合。 2。它通過模擬對象注入簡化了測試。 3。在應用程序之間變得更加重複使用。 4。依賴項的更改不需要廣泛的代碼更改。在ASP.NET核心中,DI主要使用構造函數注入。服務在program.cs或startup.cs中註冊,例如:Builder.Services.AddTransient ();。然後,它們通過構造函數注入類。 ASP.NET核心支持三個服務壽命:5。瞬態 - 每次要求它們創建。 6。範圍 - 每次請求創建一次,非常適合數據庫上下文。 7. Singleton-創建了一次並重複使用。選擇正確的壽命對於避免州共享等問題至關重要。例如,應將實體框架dbContext範圍劃定,以防止並發問題。儘管內置的DI容器足以容納許多情況,尤其是在較小的項目中,但它缺乏高級功能,例如財產注入和攔截。在這種情況下,開發人員可以選擇諸如AutoFac或Unity之類的第三方容器。總體而言,ASP.NET核心中的DI可以實現清潔依賴性管理,但需要仔細處理終生和註冊模式以確保應用程序穩定性和性能。

什麼是依賴性注入(DI),如何在C#中實現(例如,在ASP.NET Core中使用內置DI)?

依賴注入(DI)是一種設計模式,可幫助應用程序更具模塊化,可測試和可維護。 DI的核心允許類從外部來源接收其依賴性,而不是內部創建它們。這使得更容易交換實現,編寫單元測試並管理複雜的對像圖。

在C#中,尤其是在ASP.NET Core中,DI內置在框架中,並在整個應用程序生命週期中廣泛使用。


為什麼使用依賴注入?

DI成為這樣一種標準實踐的有幾個可靠的原因:

  • 鬆散的耦合:您的課程不需要知道如何創建或管理自己的依賴性。
  • 更輕鬆的測試:您可以在測試過程中註入模擬對象而不是真實的對象。
  • 可重複性:可以在應用程序的不同部分甚至不同的項目中重複使用組件。
  • 可維護性:如果依賴關係發生變化,則不必重寫它使用的每個地方。

例如,如果您正在使用將數據記錄到數據庫的服務,則使用DI意味著您可以在登錄到SQL Server,MongoDB甚至文件之間切換,而無需更改主要邏輯 - 只需交換注入的實現。


內置DI如何在ASP.NET核心中起作用?

ASP.NET Core帶有內置的輕質DI容器。它支持開箱即用的構造函數注入,這是在框架中使用DI的最常見方法。

您通常會在Startup.csProgram.cs文件中註冊服務,具體取決於您使用的是較舊的還是更新的項目模板。

這是您註冊服務的方式:

 // in Program.cs(對於.net 6最小API)
var builder = webapplication.createbuilder(args);

//在此處註冊服務
Builder.Services.AddTransient <ImyService,MyService>();

然後,您可以在這樣的控制器中使用它:

公共類MyController:ControllerBase
{
    私人閱讀的iMyservice _myservice;

    公共MyController(imyservice myService)
    {
        _myservice = myService;
    }

    [httpget]
    公共iCutionResult get()
    {
        變量結果= _myservice.dosomething();
        返回確定(結果);
    }
}

該框架根據您的註冊方式處理在運行時解決正確的IMyService實例。


服務壽命:瞬態,範圍

註冊服務時,您還選擇了它們的壽命。三個主要選項是:

  • 瞬態:每次要求創建。最適合輕巧的無狀態服務。
  • 範圍:每個客戶端請求(Web應用程序中的HTTP請求)創建一次。適合數據庫上下文之類的東西。
  • Singleton :創建了第一次請求,然後為所有後續請求重複使用。

選擇正確的壽命很重要。例如,將瞬態服務注入單例可能會引起問題,因為瞬態可能會攜帶不應共享的狀態。

假設您正在使用實體框架核心。您通常會註冊您的DbContext

 Builder.Services.AdddBContext <AppDbContext>(options =>
    options.usesqlserver(builder.configuration.getConnectionsTring(“ defaultConnection”)));

這樣可以確保上下文僅在HTTP請求期間延續並避免並發問題。


當不使用內置DI容器時

儘管內置DI在大多數情況下都效果很好,但它並不是最富含功能的容器。如果您發現自己需要高級功能,例如:

  • 財產注入
  • 自動註冊
  • 攔截或裝飾者

您可以考慮用第三方容器,例如AutoFac,Unity或Microsoft.extensions.epentions.spoction。

但是對於許多項目(尤其是中型至中型項目)來說,內置系統非常好。


因此,基本上,c#via asp.net核心中的di為您提供了一種干淨的方法來管理依賴項而無需緊密耦合。您註冊服務,在需要的地方注入它們,然後讓框架處理其餘部分。它不是過於復雜,但確實需要了解生命值以及容器如何解決類型。

以上是什麼是依賴性注入(DI),如何在C#中實現(例如,在ASP.NET Core中使用內置DI)?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

Rimworld Odyssey如何釣魚
1 個月前 By Jack chen
Kimi K2:最強大的開源代理模型
1 個月前 By Jack chen
我可以有兩個支付帳戶嗎?
1 個月前 By 下次还敢

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

熱門話題

Laravel 教程
1602
29
PHP教程
1506
276
C#.NET:使用.NET生態系統構建應用程序 C#.NET:使用.NET生態系統構建應用程序 Apr 27, 2025 am 12:12 AM

如何利用.NET構建應用?使用.NET構建應用可以通過以下步驟實現:1)了解.NET基礎知識,包括C#語言和跨平台開發支持;2)學習核心概念,如.NET生態系統的組件和工作原理;3)掌握基本和高級用法,從簡單控制台應用到復雜的WebAPI和數據庫操作;4)熟悉常見錯誤與調試技巧,如配置和數據庫連接問題;5)應用性能優化與最佳實踐,如異步編程和緩存。

PHP依賴注入容器:快速啟動 PHP依賴注入容器:快速啟動 May 13, 2025 am 12:11 AM

aphpdepentioncontiveContainerIsatoolThatManagesClassDeptions,增強codemodocultion,可驗證性和Maintainability.itactsasaceCentralHubForeatingingIndections,因此reducingTightCightTightCoupOulplingIndeSingantInting。

PHP中的依賴注入:初學者的代碼示例 PHP中的依賴注入:初學者的代碼示例 May 14, 2025 am 12:08 AM

你應該關心DependencyInjection(DI),因為它能讓你的代碼更清晰、更易維護。 1)DI通過解耦類,使其更模塊化,2)提高了測試的便捷性和代碼的靈活性,3)使用DI容器可以管理複雜的依賴關係,但要注意性能影響和循環依賴問題,4)最佳實踐是依賴於抽象接口,實現鬆散耦合。

將C#.NET應用程序部署到Azure/AWS:逐步指南 將C#.NET應用程序部署到Azure/AWS:逐步指南 Apr 23, 2025 am 12:06 AM

如何將C#.NET應用部署到Azure或AWS?答案是使用AzureAppService和AWSElasticBeanstalk。 1.在Azure上,使用AzureAppService和AzurePipelines自動化部署。 2.在AWS上,使用AmazonElasticBeanstalk和AWSLambda實現部署和無服務器計算。

​Unity遊戲開發:C#實現3D物理引擎與AI行為樹 ​Unity遊戲開發:C#實現3D物理引擎與AI行為樹 May 16, 2025 pm 02:09 PM

在Unity中,3D物理引擎和AI行為樹可以通過C#實現。 1.使用Rigidbody組件和AddForce方法可以創建滾動的球。 2.通過行為樹節點如Patrol和ChasePlayer,可以設計AI角色巡邏和追擊玩家的行為。

PHP中依賴注入的最佳實踐 PHP中依賴注入的最佳實踐 May 08, 2025 am 12:21 AM

使用依賴注入(DI)的原因是它促進了代碼的松耦合、可測試性和可維護性。 1)使用構造函數注入依賴,2)避免使用服務定位器,3)利用依賴注入容器管理依賴,4)通過注入依賴提高測試性,5)避免過度注入依賴,6)考慮DI對性能的影響。

PHP依賴注入:提高代碼可檢驗性 PHP依賴注入:提高代碼可檢驗性 May 12, 2025 am 12:03 AM

依赖注入(DI)通过显式传递依赖关系,显著提升了PHP代码的可测试性。1)DI解耦类与具体实现,使测试和维护更灵活。2)三种类型中,构造函数注入明确表达依赖,保持状态一致。3)使用DI容器管理复杂依赖,提升代码质量和开发效率。

C#作為多功能.NET語言:應用程序和示例 C#作為多功能.NET語言:應用程序和示例 Apr 26, 2025 am 12:26 AM

C#在企業級應用、遊戲開發、移動應用和Web開發中均有廣泛應用。 1)在企業級應用中,C#常用於ASP.NETCore開發WebAPI。 2)在遊戲開發中,C#與Unity引擎結合,實現角色控制等功能。 3)C#支持多態性和異步編程,提高代碼靈活性和應用性能。

See all articles