亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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

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

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

單例 (Singleton) 

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

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

作用域 (Scoped) 

每個請求一個新實例,通常在 Web 應(yīng)用中使用。

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

瞬態(tài) (Transient) :

每次請求時都會創(chuàng)建一個新的實例。

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

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

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

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

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

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

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

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

Scoped 生命周期

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

使用場景 :

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

適用性 :

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

Transient 生命周期

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

使用場景 :

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

適用性:

  • 適用于多種類型的應(yīng)用場景,不受限于請求或作用域的邊界。
  • 因為它是每次請求創(chuàng)建新實例,所以使用時需要注意控制實例構(gòu)造成本,以減少性能消耗。

選擇哪種生命周期

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

總結(jié)

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

相關(guān)文章

  • C#遞歸實現(xiàn)顯示文件夾及所有文件并計算其大小的方法

    C#遞歸實現(xiàn)顯示文件夾及所有文件并計算其大小的方法

    這篇文章主要介紹了C#遞歸實現(xiàn)顯示文件夾及所有文件并計算其大小的方法,是遍歷算法中比較典型的一種應(yīng)用,有不錯的學(xué)習(xí)借鑒價值,需要的朋友可以參考下
    2014-08-08
  • Unity UGUI實現(xiàn)滑動翻頁直接跳轉(zhuǎn)頁數(shù)

    Unity UGUI實現(xiàn)滑動翻頁直接跳轉(zhuǎn)頁數(shù)

    這篇文章主要為大家詳細(xì)介紹了Unity UGUI實現(xiàn)滑動翻頁,直接跳轉(zhuǎn)頁數(shù),文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-04-04
  • C#中使用委托的3種方式代碼示例

    C#中使用委托的3種方式代碼示例

    這篇文章主要介紹了C#中使用委托的3種方式代碼示例,本文直接給出代碼實例,沒有相關(guān)的說明解釋,需要的朋友可以參考下
    2015-03-03
  • WPF實現(xiàn)3D粒子波浪效果

    WPF實現(xiàn)3D粒子波浪效果

    這篇文章主要為大家詳細(xì)介紹了WPF實現(xiàn)3D粒子波浪效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-09-09
  • WPF輕松實現(xiàn)進(jìn)度條的示例代碼

    WPF輕松實現(xiàn)進(jìn)度條的示例代碼

    WPF中的ProgressBar控件用于表示任務(wù)進(jìn)度,適用于文件下載、數(shù)據(jù)處理等場景,本文將通過XAML和C#代碼展示如何創(chuàng)建一個基本的WPF進(jìn)度條,并演示如何通過事件處理程序更新進(jìn)度條的值來模擬耗時操作,感興趣的小伙伴跟著小編一起來看看吧
    2024-12-12
  • C#使用Equals()方法比較兩個對象是否相等的方法

    C#使用Equals()方法比較兩個對象是否相等的方法

    這篇文章主要介紹了C#使用Equals()方法比較兩個對象是否相等的方法,涉及C#操作對象的相關(guān)技巧,需要的朋友可以參考下
    2015-04-04
  • C#實現(xiàn)Winform版計算器

    C#實現(xiàn)Winform版計算器

    這篇文章主要為大家詳細(xì)介紹了C#實現(xiàn)Winform版計算器,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-05-05
  • C#獲取文件夾下所有的文件

    C#獲取文件夾下所有的文件

    這篇文章主要為大家詳細(xì)介紹了C#中獲取文件夾下所有的文件的多種方法,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2024-10-10
  • Http上傳與Ftp上傳的區(qū)別詳解

    Http上傳與Ftp上傳的區(qū)別詳解

    本篇文章是對Http上傳與Ftp上傳的區(qū)別進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-05-05
  • C#簡單獲取時間差的小例子

    C#簡單獲取時間差的小例子

    C#簡單獲取時間差的小例子,需要的朋友可以參考一下
    2013-04-04

最新評論