最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C#服務(wù)生命周期:Singleton、Scoped、Transient用法及說明

 更新時(shí)間:2025年01月20日 14:18:05   作者:bestcxx  
文章介紹了三種服務(wù)生命周期:?jiǎn)卫?、作用域和瞬態(tài),并討論了如何在ASP.NETCore中使用這些生命周期管理服務(wù),單例在應(yīng)用程序生命周期中只有一個(gè)實(shí)例,作用域在每個(gè)請(qǐng)求中創(chuàng)建一個(gè)新實(shí)例,瞬態(tài)每次請(qǐng)求時(shí)創(chuàng)建一個(gè)新實(shí)例

概念:服務(wù)生命周期

單例 (Singleton) 

整個(gè)應(yīng)用程序生命周期中只有一個(gè)實(shí)例被創(chuàng)建并共享。

如果你在依賴注入容器中將 AsyncPeriodicBackgroundWorkerBase 的實(shí)現(xiàn)注冊(cè)為單例,那么這個(gè)任務(wù)將會(huì)是單例的。

作用域 (Scoped) 

每個(gè)請(qǐng)求一個(gè)新實(shí)例,通常在 Web 應(yīng)用中使用。

如果你將它注冊(cè)為作用域服務(wù),每個(gè)作用域(例如 HTTP 請(qǐng)求)中會(huì)創(chuàng)建一個(gè)新的實(shí)例。

瞬態(tài) (Transient) :

每次請(qǐng)求時(shí)都會(huì)創(chuàng)建一個(gè)新的實(shí)例。

如果注冊(cè)為瞬態(tài)服務(wù),每次獲取該服務(wù)時(shí)都會(huì)得到一個(gè)新的實(shí)例。

如何確定任務(wù)是否為單例

假設(shè)你是在使用 ASP.NET Core 或類似的依賴注入框架,你可以通過如下方式注冊(cè)到服務(wù)中來決定生命周期:

public void ConfigureServices(IServiceCollection services)
{
    // 將該任務(wù)注冊(cè)為單例
    services.AddSingleton<MyBackgroundWorker>();
    
    // 或者作為一個(gè)作用域?qū)嵗?
    // services.AddScoped<MyBackgroundWorker>();

    // 或者作為一個(gè)瞬態(tài)實(shí)例
    // services.AddTransient<MyBackgroundWorker>();
}

對(duì) Scoped 和 Transient 進(jìn)一步辨析

在后端服務(wù)中(例如使用 ASP.NET Core 的應(yīng)用程序),Scoped 和 Transient 是兩種常用的服務(wù)生命周期管理方式,它們定義了服務(wù)實(shí)例的創(chuàng)建和使用方式。

了解它們之間的區(qū)別對(duì)于選擇合適的服務(wù)生命周期管理有重要意義:

Scoped 生命周期

Scoped 服務(wù)在每個(gè)請(qǐng)求(或作用域,一個(gè)會(huì)話內(nèi))中被創(chuàng)建一次。一個(gè)請(qǐng)求期間同一服務(wù)的所有請(qǐng)求將獲得相同的實(shí)例。

使用場(chǎng)景 :

  • 通常用于 Web 應(yīng)用程序中,作用域服務(wù)在每個(gè) HTTP 請(qǐng)求的開始時(shí)創(chuàng)建,并在請(qǐng)求結(jié)束時(shí)釋放。這種方式適合那些需要在同一請(qǐng)求上下文共享數(shù)據(jù)的情況下使用。
  • 例如,通常數(shù)據(jù)庫(kù)上下文(DbContext)就會(huì)被注冊(cè)為 Scoped 以保證一個(gè)請(qǐng)求使用同一個(gè)數(shù)據(jù)庫(kù)連接。

適用性 :

  • 不適用于非 Web 場(chǎng)景或者后臺(tái)服務(wù)中沒有請(qǐng)求界限的情況下使用。

Transient 生命周期

Transient 服務(wù)在每次請(qǐng)求它們的時(shí)候都會(huì)創(chuàng)建一個(gè)新的實(shí)例。即,每次獲取服務(wù)都會(huì)得到一個(gè)新的實(shí)例。

使用場(chǎng)景 :

  • 適用于輕量級(jí)無狀態(tài)的服務(wù),比如:工具類、轉(zhuǎn)換器等,每次使用都需要新的實(shí)例,而不需要在不同請(qǐng)求或調(diào)用之間保持狀態(tài)。
  • 優(yōu)化系統(tǒng)內(nèi)存開銷,保證服務(wù)獨(dú)占其狀態(tài)。

適用性:

  • 適用于多種類型的應(yīng)用場(chǎng)景,不受限于請(qǐng)求或作用域的邊界。
  • 因?yàn)樗敲看握?qǐng)求創(chuàng)建新實(shí)例,所以使用時(shí)需要注意控制實(shí)例構(gòu)造成本,以減少性能消耗。

選擇哪種生命周期

  • Scoped:使用 Scoped 主要是針對(duì)應(yīng)用的請(qǐng)求/會(huì)話生命周期,適合單請(qǐng)求內(nèi)的數(shù)據(jù)一致性場(chǎng)景。
  • Transient:使用 Transient 主要是為了實(shí)現(xiàn)無狀態(tài)的輕量級(jí)服務(wù),每次都可創(chuàng)建獨(dú)立實(shí)例的使用場(chǎng)景。

總結(jié)

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Unity3D實(shí)現(xiàn)扭動(dòng)擠壓瀏覽效果

    Unity3D實(shí)現(xiàn)扭動(dòng)擠壓瀏覽效果

    這篇文章主要為大家詳細(xì)介紹了Unity3D實(shí)現(xiàn)扭動(dòng)擠壓瀏覽效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-02-02
  • C#將DataGridView中的數(shù)據(jù)保存到CSV和Excel中

    C#將DataGridView中的數(shù)據(jù)保存到CSV和Excel中

    這篇文章介紹了C#將DataGridView中的數(shù)據(jù)保存到CSV和Excel中的方法,文中通過示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-04-04
  • C#實(shí)現(xiàn)WebAPI接口安全加密的具體方案

    C#實(shí)現(xiàn)WebAPI接口安全加密的具體方案

    在項(xiàng)目開發(fā)過程中,接口的安全性往往是一個(gè)容易被忽視但極其關(guān)鍵的環(huán)節(jié),本文介紹了一套實(shí)際項(xiàng)目中已落地的?Web?API?安全加密方案,涵蓋了?SHA256?加簽、RSA?非對(duì)稱加密、AES?對(duì)稱加密?以及相關(guān)數(shù)據(jù)格式轉(zhuǎn)換等內(nèi)容,需要的朋友可以參考下
    2025-06-06
  • C#控制臺(tái)實(shí)現(xiàn)簡(jiǎn)單飛行棋游戲

    C#控制臺(tái)實(shí)現(xiàn)簡(jiǎn)單飛行棋游戲

    這篇文章主要為大家詳細(xì)介紹了C#控制臺(tái)實(shí)現(xiàn)簡(jiǎn)單飛行棋游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-07-07
  • C#傳遞參數(shù)到線程的方法匯總

    C#傳遞參數(shù)到線程的方法匯總

    這篇文章主要介紹了C#傳遞參數(shù)到線程的方法,非常實(shí)用,需要的朋友可以參考下
    2014-08-08
  • C#中分部類和分部方法(partial)

    C#中分部類和分部方法(partial)

    分部類(partial class)是C#中用于解決機(jī)器生成代碼與人工編寫代碼沖突的一種特性,主要用于自動(dòng)生成的代碼場(chǎng)景,本文給大家介紹C#中分部類和分部方法(partial),感興趣的朋友跟隨小編一起看看吧
    2026-03-03
  • 使用C#合并PDF文檔的實(shí)現(xiàn)步驟

    使用C#合并PDF文檔的實(shí)現(xiàn)步驟

    在當(dāng)今的數(shù)字化辦公環(huán)境中,PDF文檔已經(jīng)成為信息交換和存檔的標(biāo)準(zhǔn)格式,然而,在許多業(yè)務(wù)場(chǎng)景中,開發(fā)者會(huì)面臨一個(gè)共同的需求:將多個(gè)PDF文檔合并為一個(gè),本文將深入探討如何利用Spire.PDF for .NET 這一強(qiáng)大的工具,幫助C#開發(fā)者輕松實(shí)現(xiàn)PDF文檔的合并,需要的朋友可以參考下
    2025-09-09
  • 在C#語言里對(duì)NULL的技術(shù)處理小結(jié)

    在C#語言里對(duì)NULL的技術(shù)處理小結(jié)

    在 C# 中處理 null 值是編寫可靠且可靠的代碼的一個(gè)重要方面,在本文中,我將討論一些在 C# 中處理 null 值的最常用技術(shù),感興趣的朋友跟隨小編一起看看吧
    2024-05-05
  • C#并行編程之PLINQ(并行LINQ)

    C#并行編程之PLINQ(并行LINQ)

    這篇文章介紹了C#并行編程之PLINQ(并行LINQ),文中通過示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-05-05
  • C#中的委托使用

    C#中的委托使用

    委托是C#中新加入的一個(gè)類型,可以把它想作一個(gè)和Class類似的一種類型,和使用類相似,使用一個(gè)委托時(shí),需要兩個(gè)步驟,首先你要定義一個(gè)委托,就像是定義一個(gè)類一樣;然后,你可以創(chuàng)建一個(gè)或多個(gè)該委托的實(shí)例。
    2016-07-07

最新評(píng)論

江陵县| 克拉玛依市| 瑞金市| 天长市| 商城县| 滨州市| 图木舒克市| 洛浦县| 荥经县| 胶南市| 吉木萨尔县| 车险| 平乡县| 扎赉特旗| 电白县| 泰宁县| 于田县| 庆安县| 丰原市| 雅江县| 六安市| 衡山县| 泽库县| 沾益县| 蒙城县| 高清| 集贤县| 洞口县| 全南县| 武山县| 舟曲县| 马尔康县| 馆陶县| 大田县| 包头市| 石泉县| 岫岩| 麦盖提县| 黑水县| 张家口市| 且末县|