国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【C#】.net core 6.0 依賴注入生命周期

這篇具有很好參考價值的文章主要介紹了【C#】.net core 6.0 依賴注入生命周期。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

給自己一個目標,然后堅持一段時間,總會有收獲和感悟!
對于.net core而言,依賴注入生命周期有三種瞬態(tài)(Transient)、作用域(Scoped)和單例(Singleton),無論使用哪種生命周期,都需要確保對象的線程安全性,并正確地處理依賴關(guān)系。

【C#】.net core 6.0 依賴注入生命周期,C#,Asp.Net Core,c#,.netcore,依賴注入,生命周期

一、程序生命周期

在了解依賴注入的生命周期前,我們先建單了解下應(yīng)用程序的生命周期,
在 .NET Core 6.0 中,應(yīng)用程序的生命周期包括以下階段:

2.1、構(gòu)造函數(shù)

在應(yīng)用程序啟動時,會調(diào)用構(gòu)造函數(shù)來創(chuàng)建主機(Host)對象。

2.2、配置

在構(gòu)造函數(shù)之后,會調(diào)用配置方法來設(shè)置應(yīng)用程序的配置,例如添加服務(wù)、配置中間件等。

2.3、啟動

配置完成后,會調(diào)用啟動方法來啟動應(yīng)用程序,包括啟動 HTTP 服務(wù)器、啟動后臺服務(wù)等。

2.4、運行

應(yīng)用程序開始監(jiān)聽請求并進行處理,這是應(yīng)用程序的主要運行階段。

2.5、停止

當應(yīng)用程序接收到停止信號時(如收到終止命令或服務(wù)器關(guān)閉),會觸發(fā)停止方法來執(zhí)行一些清理操作。

2.6、釋放資源

在停止之后,應(yīng)用程序釋放資源并進行善后工作,如關(guān)閉數(shù)據(jù)庫連接、釋放資源等。

除了上述階段外,還可以通過使用生命周期中的事件鉤子來添加自定義邏輯,以便在特定時刻執(zhí)行某些代碼。
需要注意的是,不同類型的應(yīng)用程序(如控制臺應(yīng)用程序、Web 應(yīng)用程序等)的生命周期可以有所不同,但上述階段是通用的核心生命周期。

二、依賴注入生命周期

在 .NET Core 6.0 中,依賴注入服務(wù)的生命周期有三種:瞬態(tài)(Transient)、作用域(Scoped)和單例(Singleton)。

2.1、瞬態(tài)生命周期

在每次請求時都會創(chuàng)建一個新的實例,并在請求結(jié)束時立即銷毀該實例,適用于輕量級的對象。這種生命周期可以通過
services.AddTransient 方法進行注冊。

2.2、作用域生命周期

在每個 HTTP 請求處理期間,會使用同一個實例,請求結(jié)束時實例也會被銷毀,適用于線程安全的對象,如 EF 上下文。這種生命周期可以通過
services.AddScoped 方法進行注冊。

2.3、單例生命周期

在整個應(yīng)用程序生命周期中只會創(chuàng)建一個實例,適用于被多處使用的對象,如配置信息、單例服務(wù)等。這種生命周期可以通過
services.AddSingleton 方法進行注冊。

除了上述生命周期外,還可以通過 services.AddSingleton 方法傳遞一個工廠方法,以實現(xiàn)自定義的生命周期管理。
無論使用哪種生命周期,都需要確保對象的線程安全性,并正確地處理依賴關(guān)系。正確使用依賴注入可以提高代碼的可測試性和可維護性,將對象的創(chuàng)建和銷毀等生命周期管理交由 DI 容器負責,從而簡化代碼的編寫。

三、代碼舉例

當使用 .NET Core 6.0 進行依賴注入時,可以使用以下代碼示例來演示瞬態(tài)、作用域和單例生命周期

3.1、瞬態(tài)生命周期

public interface ITransientService
{
void DoSomething();
}

public class TransientService : ITransientService
{
private readonly Guid _id;

public TransientService()
{
    _id = Guid.NewGuid();
}

public void DoSomething()
{
    Console.WriteLine($"TransientService ID: {_id}");
}

}

// 在 Startup.cs 的 ConfigureServices 方法中添加以下代碼:
services.AddTransient<ITransientService, TransientService>();

// 在需要使用服務(wù)的地方,使用構(gòu)造函數(shù)注入:
public class MyController
{
private readonly ITransientService _transientService;

public MyController(ITransientService transientService)
{
    _transientService = transientService;
}

// 使用服務(wù)
public void MyAction()
{
    _transientService.DoSomething();
}

}

3.2、作用域生命周期

public interface IScopeService
{
void DoSomething();
}

public class ScopeService : IScopeService
{
private readonly Guid _id;

public ScopeService()
{
    _id = Guid.NewGuid();
}

public void DoSomething()
{
    Console.WriteLine($"ScopeService ID: {_id}");
}

}

// 在 Startup.cs 的 ConfigureServices 方法中添加以下代碼:
services.AddScoped<IScopeService, ScopeService>();

// 在需要使用服務(wù)的地方,使用構(gòu)造函數(shù)注入:
public class MyController
{
private readonly IScopeService _scopeService;

public MyController(IScopeService scopeService)
{
    _scopeService = scopeService;
}

// 使用服務(wù)
public void MyAction()
{
    _scopeService.DoSomething();
}

}

3.3、單例生命周期

public interface ISingletonService
{
void DoSomething();
}

public class SingletonService : ISingletonService
{
private readonly Guid _id;

public SingletonService()
{
    _id = Guid.NewGuid();
}

public void DoSomething()
{
    Console.WriteLine($"SingletonService ID: {_id}");
}

}

// 在 Startup.cs 的 ConfigureServices 方法中添加以下代碼:
services.AddSingleton<ISingletonService, SingletonService>();

// 在需要使用服務(wù)的地方,使用構(gòu)造函數(shù)注入:
public class MyController
{
private readonly ISingletonService _singletonService;

public MyController(ISingletonService singletonService)
{
    _singletonService = singletonService;
}

// 使用服務(wù)
public void MyAction()
{
    _singletonService.DoSomething();
}

}

以上示例展示了如何在 .NET Core 6.0 中注冊和使用瞬態(tài)、作用域和單例生命周期的依賴注入服務(wù)。
根據(jù)實際需求,選擇適合的生命周期以確保正確的對象創(chuàng)建和銷毀,并維護正確的對象狀態(tài)。

四、自定義管理

當通過 services.AddSingleton 方法傳遞一個工廠方法時,可以使用委托來創(chuàng)建自定義的生命周期管理。

  • 下面是一個示例代碼:
    首先,定義一個自定義的服務(wù)類 CustomService:
    public class CustomService
    {
    public DateTime CreatedAt { get; }

    public CustomService()
    {
    CreatedAt = DateTime.Now;
    }
    }

然后,在應(yīng)用程序啟動時,注冊該服務(wù)并傳遞一個工廠方法來實現(xiàn)自定義的生命周期管理:
public class Startup
{
public void ConfigureServices(IServiceCollection services)
{
services.AddSingleton(serviceProvider =>
{
// 創(chuàng)建 CustomService 對象,并進行自定義的處理
var customService = new CustomService();

        // 在此可以添加自定義的生命周期管理邏輯

        return customService;
    });

    // 其他服務(wù)的注冊
    // ...
}

}

在上述示例中,通過 services.AddSingleton(serviceProvider => { … }) 方法向 DI 容器注冊了一個 CustomService 類型的單例服務(wù),傳遞了一個工廠方法作為參數(shù)。
在這個工廠方法中,我們可以自定義創(chuàng)建 CustomService 對象的方式,并進行額外的處理。
這樣,當通過 DI 容器解析 CustomService 時,每次獲取到的都是通過工廠方法創(chuàng)建的同一個實例,而且可以根據(jù)需要在工廠方法中進行自定義的生命周期管理操作。
需要注意的是,工廠方法可以接收一個 IServiceProvider 參數(shù),以便在創(chuàng)建服務(wù)實例時獲取其他已注冊的服務(wù)。這在某些場景下可能會很有用。

五、依賴注入原理

在 .NET Core 6.0 中,依賴注入(DI)是一個重要的功能,它通過提供、解析和跟蹤應(yīng)用程序中的各種服務(wù)對象來幫助解耦和組織代碼。
依賴注入的原理主要包括以下幾個方面:
1.服務(wù)注冊:在應(yīng)用程序啟動時,通過使用
IServiceCollection 接口的 AddTransient、AddScoped、AddSingleton 等方法將服務(wù)類型和其生命周期添加到 DI 容器中。
2.服務(wù)解析:當需要使用某個服務(wù)的實例時,可以通過 DI 容器提供的
IServiceProvider 接口的 GetRequiredService、GetService 等方法來獲取該服務(wù)的實例,其中 T 是服務(wù)類型。
3.生命周期管理:DI 容器會根據(jù)服務(wù)的生命周期設(shè)置來控制服務(wù)對象的創(chuàng)建和銷毀。根據(jù)服務(wù)的生命周期,可以使用
AddTransient、AddScoped、AddSingleton 方法注冊瞬態(tài)、作用域和單例服務(wù)。

  • 瞬態(tài)(Transient)生命周期表示每次通過 DI 容器獲取服務(wù)時都會創(chuàng)建一個新的實例。
  • 作用域(Scoped)生命周期表示在同一個作用域內(nèi)(例如,相同的 HTTP 請求)獲取服務(wù)時將使用同一個實例。
  • 單例(Singleton)生命周期表示整個應(yīng)用程序中只創(chuàng)建一個實例,并且所有的請求都會使用同一個實例。
    1.依賴關(guān)系解析:DI 容器能夠自動解析服務(wù)對象之間的依賴關(guān)系,即當需要解析某個服務(wù)時,DI 容器會自動創(chuàng)建該服務(wù)所依賴的其他服務(wù)實例,并將其注入到需要的位置上。
    2.服務(wù)擴展:通過擴展
    IServiceCollection 接口,可以自定義添加和配置服務(wù),使得 DI 容器能夠支持更多的功能和擴展。

總體而言,.NET Core 6.0 的依賴注入原理基于 DI 容器、服務(wù)注冊、服務(wù)解析和生命周期管理,幫助開發(fā)者更好地組織和管理應(yīng)用程序中的各種服務(wù)對象,提高代碼的可擴展性、可測試性和松耦合性。文章來源地址http://www.zghlxwxcb.cn/news/detail-768411.html

到了這里,關(guān)于【C#】.net core 6.0 依賴注入生命周期的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔相關(guān)法律責任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • asp.net core webapi如何執(zhí)行周期性任務(wù)

    asp.net core webapi如何執(zhí)行周期性任務(wù)

    新建asp.net core webapi項目,使用Nuget搜索安裝Quartz包。 注意:定時執(zhí)行時間格式,參考連接:https://www.cnblogs.com/wudequn/p/8506938.html 在IIS中找到這個站點所用的程序池,點擊“高級設(shè)置…” 在打開的列表中更改以下設(shè)置: 回收——固定時間間隔(分鐘) 改為 0 ——虛擬/專用內(nèi)存

    2024年02月13日
    瀏覽(104)
  • .Net Core核心概念——依賴注入和中間件

    .Net Core核心概念——依賴注入和中間件

    1. 為什么要用依賴注入(DI) 什么是依賴注入,為什么要使用呢?簡單通俗說就是一個類需要另一個類來協(xié)助工作,就產(chǎn)生了依賴,所以需要的依賴項就要【注入】過來一起來協(xié)同完成工作。 軟件設(shè)計原則中有一個依賴倒置原則(DIP)講的是要依賴于抽象,不要依賴于具體,高層

    2024年02月08日
    瀏覽(92)
  • 【ASP.NET Core】在 Mini-API 中注入服務(wù)

    【ASP.NET Core】在 Mini-API 中注入服務(wù)

    經(jīng)過版本更新,Mini API 的功能逐步完善,早期支持得不太好的 mini API 現(xiàn)在許多特性都可以用了,比如灰常重要的依賴注入。 咱們先來個相當簡單的注入測試。來,定義一個服務(wù)類,為了偷懶,老周這里就不使用 接口 + 實現(xiàn)類 的方式了。 此服務(wù)類提供給外部調(diào)用的公共方法

    2024年02月08日
    瀏覽(89)
  • .Net6 Web Core API 配置 Autofac 封裝 --- 依賴注入

    .Net6 Web Core API 配置 Autofac 封裝 --- 依賴注入

    目錄 一、NuGet 包導(dǎo)入 二、Autofac 封裝類 三、Autofac 使用 四、案例測試 下列封裝 采取 程序集注入方法 , 單個依賴注入, 也適用, 可依賴注入的地方配置 Autofac Autofac.Extensions.DependencyInjection Autofac.Extras.DynamicProxy ? ?

    2024年02月14日
    瀏覽(97)
  • 【C#】.net core 6.0 使用第三方日志插件Log4net,配置文件詳細說明

    【C#】.net core 6.0 使用第三方日志插件Log4net,配置文件詳細說明

    歡迎來到《小5講堂》 大家好,我是全棧小5。 這是《C#》系列文章,每篇文章將以博主理解的角度展開講解, 特別是針對知識點的概念進行敘說,大部分文章將會對這些概念進行實際例子驗證,以此達到加深對知識點的理解和掌握。 溫馨提示:博主能力有限,理解水平有限

    2024年04月12日
    瀏覽(31)
  • 【服務(wù)器】ASP.Net Core(C#)創(chuàng)建Web站點

    【服務(wù)器】ASP.Net Core(C#)創(chuàng)建Web站點

    簡單幾步實現(xiàn)本地ASP.Net.Core web 站點結(jié)合cpolar內(nèi)網(wǎng)穿透工具實現(xiàn)遠程訪問 1. 創(chuàng)建站點 *環(huán)境搭建,這邊測試,使用.NET 6.0 SDK,可以點擊跳轉(zhuǎn)到官網(wǎng)下載,下載后安裝即可. 安裝完成后,進入到某個文件夾,打開powershell執(zhí)行下面命令,創(chuàng)建新的 Web 應(yīng)用,名稱叫:aspnetcoreapp 2. 運行站點 信任開

    2024年02月11日
    瀏覽(24)
  • C# ASP.NET Core Web API 身份授權(quán)(JWT)驗證(一)

    C# ASP.NET Core Web API 身份授權(quán)(JWT)驗證(一)

    1.開發(fā)環(huán)境 VS2022,安裝時記得勾選ASP.NET有關(guān)的都選上,建議全選,省的麻煩。 ???????? 2.創(chuàng)建初始工程 TestApi (你自己的工程名稱)。 ? ?這就創(chuàng)建工程成功了,按 F5 則可以進行調(diào)試了。 而在項目中,我們不僅僅會用到基礎(chǔ)的api功能,我們一般還會用到? 身份授權(quán)(J

    2024年02月02日
    瀏覽(29)
  • 在 C#和ASP.NET Core中創(chuàng)建 gRPC 客戶端和服務(wù)器

    在 C#和ASP.NET Core中創(chuàng)建 gRPC 客戶端和服務(wù)器

    gRPC 是一種可以跨語言運行的現(xiàn)代高性能遠程過程調(diào)用 (RPC) 框架。gRPC 實際上已經(jīng)成為 RPC 框架的行業(yè)標準,Google 內(nèi)外的組織都在使用它來從微服務(wù)到計算的“最后一英里”(移動、網(wǎng)絡(luò)和物聯(lián)網(wǎng))的強大用例。 gRPC是一個高性能的開源的通用RPC框架,由Google公司開發(fā),支持常

    2024年04月23日
    瀏覽(93)
  • .NET Core反射獲取帶有自定義特性的類,通過依賴注入根據(jù)Attribute元數(shù)據(jù)信息調(diào)用對應(yīng)的方法

    .NET Core反射獲取帶有自定義特性的類,通過依賴注入根據(jù)Attribute元數(shù)據(jù)信息調(diào)用對應(yīng)的方法

    前段時間有朋友問道一個這樣的問題,.NET Core中如何通過Attribute的元數(shù)據(jù)信息來調(diào)用標記的對應(yīng)方法。我第一時間想到的就是通過C#反射獲取帶有Custom Attribute標記的類,然后通過依賴注入(DI)的方式獲取對應(yīng)服務(wù)的方法并通過反射動態(tài)執(zhí)行類的方法,從而實現(xiàn)更靈活的編程

    2023年04月15日
    瀏覽(32)
  • asp.net core6 webapi 使用反射批量注入接口層和實現(xiàn)接口層的接口的類到ioc中

    IBLL接口層類庫 BLL實現(xiàn)接口層類庫 program中利用反射批量注入 在控制器中使用構(gòu)造函數(shù)傳參就可以調(diào)用已經(jīng)注冊的所有是是實現(xiàn)接口的類了的實列了

    2024年02月13日
    瀏覽(24)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包