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

C#在 .NET中使用依賴(lài)注入的示例詳解

 更新時(shí)間:2024年01月10日 08:37:07   作者:rjcql  
這篇文章主要為大家詳細(xì)介紹了C#如何在 .NET中使用依賴(lài)注入,文中的示例代碼講解詳細(xì),具有一定的學(xué)習(xí)價(jià)值,感興趣的小伙伴可以跟隨小編一起了解一下

寫(xiě)在前面

在 .NET 中使用依賴(lài)注入 (DI)。 可以借助 Microsoft 擴(kuò)展,通過(guò)添加服務(wù)并在 IServiceCollection 中配置這些服務(wù)來(lái)管理 DI。 使用 IHost 接口來(lái)公開(kāi)所有 IServiceProvider 實(shí)例,用來(lái)充當(dāng)所有已注冊(cè)的服務(wù)的容器。

示例代碼中使用了一個(gè)關(guān)鍵的枚舉 ServiceLifetime 指定 IServiceCollection 中服務(wù)的生存期,該枚舉包含三個(gè)類(lèi)型:

Scoped 服務(wù)只會(huì)隨著新范圍而改變,但在一個(gè)范圍中是相同的實(shí)例。

Singleton 服務(wù)總是相同的,新實(shí)例僅被創(chuàng)建一次。

Transient 服務(wù)總是不同的,每次檢索服務(wù)時(shí),都會(huì)創(chuàng)建一個(gè)新實(shí)例。

需要從NuGet安裝  Microsoft.Extensions.Hosting 類(lèi)庫(kù)

代碼實(shí)現(xiàn)

服務(wù)接口實(shí)現(xiàn)

using Microsoft.Extensions.DependencyInjection;
 
namespace ConsoleDI.Example;
 
public interface IReportServiceLifetime
{
    Guid Id { get; }
 
    ServiceLifetime Lifetime { get; }
}
 
// 創(chuàng)建了多個(gè)接口和相應(yīng)的實(shí)現(xiàn)。 其中每個(gè)服務(wù)都唯一標(biāo)識(shí)并與 ServiceLifetime 配對(duì)
public interface IExampleTransientService : IReportServiceLifetime
{
    ServiceLifetime IReportServiceLifetime.Lifetime => ServiceLifetime.Transient;
}
 
public interface IExampleScopedService : IReportServiceLifetime
{
    ServiceLifetime IReportServiceLifetime.Lifetime => ServiceLifetime.Scoped;
}
 
public interface IExampleSingletonService : IReportServiceLifetime
{
    ServiceLifetime IReportServiceLifetime.Lifetime => ServiceLifetime.Singleton;
}
 
internal sealed class ExampleTransientService : IExampleTransientService
{
    Guid IReportServiceLifetime.Id { get; } = Guid.NewGuid();
}
 
internal sealed class ExampleScopedService : IExampleScopedService
{
    Guid IReportServiceLifetime.Id { get; } = Guid.NewGuid();
}
 
internal sealed class ExampleSingletonService : IExampleSingletonService
{
    Guid IReportServiceLifetime.Id { get; } = Guid.NewGuid();
}

示例代碼

namespace ConsoleDI.Example;
 
internal sealed class ServiceLifetimeReporter(
    IExampleTransientService transientService,
    IExampleScopedService scopedService,
    IExampleSingletonService singletonService)
{
    public void ReportServiceLifetimeDetails(string lifetimeDetails)
    {
        Console.WriteLine(lifetimeDetails);
 
        LogService(transientService, "每次都是新建的對(duì)象,一直保持不同");
        LogService(scopedService, "在函數(shù)域范圍內(nèi)只創(chuàng)建一次,不同函數(shù)內(nèi)為不同對(duì)象");
        LogService(singletonService, "全局單例,一直是同一個(gè)");
    }
 
    private static void LogService<T>(T service, string message)
        where T : IReportServiceLifetime =>
        Console.WriteLine($"    {typeof(T).Name}: {service.Id} ({message})");
}

調(diào)用示例

到此這篇關(guān)于C#在 .NET中使用依賴(lài)注入的示例詳解的文章就介紹到這了,更多相關(guān)C#依賴(lài)注入內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C#中out與ref作用區(qū)別示例分析

    C#中out與ref作用區(qū)別示例分析

    這篇文章主要為大家介紹了C#中out與ref作用區(qū)別示例分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-11-11
  • c#遍歷System.drawing.Color下面的所有顏色以及名稱(chēng)以查看

    c#遍歷System.drawing.Color下面的所有顏色以及名稱(chēng)以查看

    c#遍歷System.drawing.Color下面的所有顏色以及名稱(chēng)以查看,需要的朋友可以參考一下
    2013-02-02
  • c# 引用類(lèi)型和值類(lèi)型

    c# 引用類(lèi)型和值類(lèi)型

    CLR支持兩種類(lèi)型:引用類(lèi)型和值類(lèi)型。引用類(lèi)型總是從托管堆上分配的
    2012-10-10
  • C#對(duì)Task中的異常進(jìn)行捕獲的幾種常見(jiàn)方法

    C#對(duì)Task中的異常進(jìn)行捕獲的幾種常見(jiàn)方法

    在C#中異步Task是一個(gè)很方便的語(yǔ)法,經(jīng)常用在處理異步,例如需要下載等待等方法中,不用函數(shù)跳轉(zhuǎn),代碼閱讀性大大提高,深受大家喜歡,但是有時(shí)候發(fā)現(xiàn)我們的異步函數(shù)可能出現(xiàn)了報(bào)錯(cuò),本文給大家介紹了C#對(duì)Task中的異常進(jìn)行捕獲的幾種常見(jiàn)方法,需要的朋友可以參考下
    2025-01-01
  • WinForm實(shí)現(xiàn)同時(shí)讓兩個(gè)窗體有激活效果的特效實(shí)例

    WinForm實(shí)現(xiàn)同時(shí)讓兩個(gè)窗體有激活效果的特效實(shí)例

    這篇文章主要介紹了WinForm實(shí)現(xiàn)同時(shí)讓兩個(gè)窗體有激活效果的特效實(shí)例,基于windows api實(shí)現(xiàn)一個(gè)窗體激活的時(shí)候給另外一個(gè)發(fā)消息的特效,在進(jìn)行C#項(xiàng)目開(kāi)發(fā)時(shí)有一定的實(shí)用價(jià)值,需要的朋友可以參考下
    2014-09-09
  • C#利用Free Spire.XLS for .NET復(fù)制Excel工作表

    C#利用Free Spire.XLS for .NET復(fù)制Excel工作表

    在日常的 .NET 開(kāi)發(fā)中,我們經(jīng)常需要操作 Excel 文件,本文將詳細(xì)介紹C#如何使用Free Spire.XLS for .NET 在同一工作簿內(nèi)或不同工作簿之間復(fù)制工作表,有需要的可以了解下
    2025-09-09
  • 使用遞歸實(shí)現(xiàn)數(shù)組求和示例分享

    使用遞歸實(shí)現(xiàn)數(shù)組求和示例分享

    這篇文章主要介紹了使用遞歸實(shí)現(xiàn)數(shù)組求和示例,思路是給定一個(gè)含有n個(gè)元素的整型數(shù)組a,求a中所有元素的和,需要的朋友可以參考下
    2014-03-03
  • C#、.Net中把字符串(String)格式轉(zhuǎn)換為DateTime類(lèi)型的三種方法

    C#、.Net中把字符串(String)格式轉(zhuǎn)換為DateTime類(lèi)型的三種方法

    這篇文章主要介紹了C#、.Net中把字符串(String)格式轉(zhuǎn)換為DateTime類(lèi)型的三種方法,本文總結(jié)了Convert.ToDateTime(string)、Convert.ToDateTime(string, IFormatProvider)、DateTime.ParseExact()三種方法,需要的朋友可以參考下
    2015-07-07
  • 使用VS2010 C#開(kāi)發(fā)ActiveX控件(上)

    使用VS2010 C#開(kāi)發(fā)ActiveX控件(上)

    最近做讀卡器的B/S應(yīng)用程序開(kāi)發(fā),由于讀卡器廠(chǎng)商提供的手冊(cè)都是C/S版本的,而且只有一個(gè)原始的Dll包,并沒(méi)有web版的,那么就只好自己動(dòng)手,豐衣足食了
    2011-05-05
  • C#中創(chuàng)建統(tǒng)一API接口的實(shí)現(xiàn)方案

    C#中創(chuàng)建統(tǒng)一API接口的實(shí)現(xiàn)方案

    在 C# 中創(chuàng)建統(tǒng)一 API 接口需要從架構(gòu)設(shè)計(jì)、技術(shù)選型和代碼實(shí)現(xiàn)等多個(gè)層面進(jìn)行規(guī)劃,本文給大家詳細(xì)介紹了實(shí)現(xiàn)方案和完整示例代碼,對(duì)大家的學(xué)習(xí)或工作有一定的幫助,需要的朋友可以參考下
    2025-04-04

最新評(píng)論

琼结县| 汉川市| 界首市| 公安县| 安泽县| 班戈县| 古浪县| 丹阳市| 白玉县| 丰镇市| 闽侯县| 紫云| 南汇区| 隆德县| 南平市| 锦屏县| 葫芦岛市| 金坛市| 垫江县| 芦溪县| 长岛县| 漯河市| 林州市| 乐平市| 磐石市| 泰兴市| 清苑县| 城步| 读书| 花垣县| 德阳市| 长葛市| 山丹县| 如皋市| 黄大仙区| 雅安市| 湖北省| 伊宁市| 东兰县| 湖口县| 滨州市|