色综合图-色综合图片-色综合图片二区150p-色综合图区-玖玖国产精品视频-玖玖香蕉视频

您的位置:首頁技術(shù)文章
文章詳情頁

ASP.NET Core依賴注入DI容器的方法實(shí)現(xiàn)

瀏覽:156日期:2022-06-11 09:29:56
目錄
  • 一、注冊(cè)服務(wù)
  • 二、解析依賴
  • 三、實(shí)現(xiàn)自定義的服務(wù)提供程序
  • 四、總結(jié)

ASP.NET Core 是一個(gè)跨平臺(tái)、高性能的框架,它提供了一種依賴注入(DI)容器,用于管理應(yīng)用程序中的對(duì)象和服務(wù)。DI 是一種設(shè)計(jì)模式,它通過將對(duì)象的創(chuàng)建和管理分離出來,實(shí)現(xiàn)了應(yīng)用程序的松耦合,提高了代碼的可維護(hù)性、可測試性和可擴(kuò)展性。

一、注冊(cè)服務(wù)

在 ASP.NET Core 中,DI 容器使用 IServiceCollection 接口來注冊(cè)服務(wù)。IServiceCollection 接口定義了一組方法,用于向 DI 容器中注冊(cè)服務(wù)。常用的注冊(cè)方法包括:

  • AddTransient<TService, TImplementation>():向 DI 容器中注冊(cè)一個(gè)瞬時(shí)生命周期的服務(wù)。每次請(qǐng)求該服務(wù)時(shí),都會(huì)創(chuàng)建一個(gè)新的實(shí)例。
  • AddScoped<TService, TImplementation>():向 DI 容器中注冊(cè)一個(gè)作用域生命周期的服務(wù)。每次請(qǐng)求該服務(wù)時(shí),都會(huì)創(chuàng)建一個(gè)新的實(shí)例,并在同一作用域內(nèi)共享該實(shí)例。
  • AddSingleton<TService, TImplementation>():向 DI 容器中注冊(cè)一個(gè)單例生命周期的服務(wù)。在應(yīng)用程序的整個(gè)生命周期中,只會(huì)創(chuàng)建一個(gè)實(shí)例,并在整個(gè)應(yīng)用程序中共享該實(shí)例。

除了上述常用的注冊(cè)方法,IServiceCollection 還提供了一些其他的注冊(cè)方法,例如:

  • AddTransient():向 DI 容器中注冊(cè)一個(gè)瞬時(shí)生命周期的服務(wù)。服務(wù)的實(shí)現(xiàn)類型由 TService 的實(shí)現(xiàn)類型決定。
  • AddScoped():向 DI 容器中注冊(cè)一個(gè)作用域生命周期的服務(wù)。服務(wù)的實(shí)現(xiàn)類型由 TService 的實(shí)現(xiàn)類型決定。
  • AddSingleton():向 DI 容器中注冊(cè)一個(gè)單例生命周期的服務(wù)。服務(wù)的實(shí)現(xiàn)類型由 TService 的實(shí)現(xiàn)類型決定。

除了注冊(cè)服務(wù)的方法之外,IServiceCollection 還提供了一些其他的方法,例如:

  • TryAddTransient<TService, TImplementation>():嘗試向 DI 容器中注冊(cè)一個(gè)瞬時(shí)生命周期的服務(wù)。如果該服務(wù)已經(jīng)存在,則不進(jìn)行注冊(cè)。
  • TryAddScoped<TService, TImplementation>():嘗試向 DI 容器中注冊(cè)一個(gè)作用域生命周期的服務(wù)。如果該服務(wù)已經(jīng)存在,則不進(jìn)行注冊(cè)。
  • TryAddSingleton<TService, TImplementation>():嘗試向 DI 容器中注冊(cè)一個(gè)單例生命周期的服務(wù)。如果該服務(wù)已經(jīng)存在,則不進(jìn)行注冊(cè)。

示例代碼:

public void ConfigureServices(IServiceCollection services)
{
    // 注冊(cè)一個(gè)瞬時(shí)生命周期的服務(wù)
    services.AddTransient<IMyService, MyService>();

    // 注冊(cè)一個(gè)作用域生命周期的服務(wù)
    services.AddScoped<IMyScopedService, MyScopedService>();

    // 注冊(cè)一個(gè)單例生命周期的服務(wù)
    services.AddSingleton<IMySingletonService, MySingletonService>();
}

二、解析依賴

在 ASP.NET Core 中,DI 容器使用 IServiceProvider 接口來解析依賴,獲取服務(wù)的實(shí)例。IServiceProvider 接口定義了一個(gè) GetService 方法,用于獲取指定類型的服務(wù)實(shí)例。示例代碼:

public class MyController : Controller
{
    private readonly IMyService _myService;

    public MyController(IServiceProvider serviceProvider)
    {
// 通過 IServiceProvider 解析依賴
_myService = serviceProvider.GetService<IMyService>();
    }

    public IActionResult Index()
    {
var message = _myService.GetMessage();
return View(model: message);
    }
}

在上面的代碼中,MyController 類的構(gòu)造函數(shù)接收一個(gè) IServiceProvider 實(shí)例作為參數(shù),通過 IServiceProvider.GetService() 方法獲取 IMyService 實(shí)例。在 Index 方法中,調(diào)用 _myService.GetMessage() 方法獲取消息,并將其傳遞給視圖。

三、實(shí)現(xiàn)自定義的服務(wù)提供程序

在 ASP.NET Core 中,可以通過實(shí)現(xiàn) IServiceProvider 接口來實(shí)現(xiàn)自定義的服務(wù)提供程序。IServiceProvider 接口只定義了一個(gè) GetService 方法,用于獲取指定類型的服務(wù)實(shí)例。示例代碼:

public class MyServiceProvider : IServiceProvider
{
    public object GetService(Type serviceType)
    {
if (serviceType == typeof(IMyService))
{
    return new MyService();
}
else if (serviceType == typeof(IMyScopedService))
{
    return new MyScopedService();
}
else if (serviceType == typeof(IMySingletonService))
{
    return new MySingletonService();
}
else
{
    return null;
}
    }
}

在上面的代碼中,MyServiceProvider 類實(shí)現(xiàn)了 IServiceProvider 接口,并重寫了 GetService 方法。在 GetService 方法中,根據(jù)服務(wù)類型返回相應(yīng)的服務(wù)實(shí)例。

要使用自定義的服務(wù)提供程序,可以在 Startup 類的 ConfigureServices 方法中調(diào)用 services.AddSingleton<IServiceProvider, MyServiceProvider>() 方法將其注冊(cè)到 DI 容器中。示例代碼:

public void ConfigureServices(IServiceCollection services)
{
    // 注冊(cè)自定義的服務(wù)提供程序
    services.AddSingleton&lt;IServiceProvider, MyServiceProvider&gt;();
}

四、總結(jié)

ASP.NET Core 的 DI 容器提供了一種簡單、靈活的方式來管理應(yīng)用程序中的對(duì)象和服務(wù)。通過注冊(cè)服務(wù)、解析依賴和實(shí)現(xiàn)自定義的服務(wù)提供程序,可以實(shí)現(xiàn)應(yīng)用程序的松耦合,提高代碼的可維護(hù)性、可測試性和可擴(kuò)展性。在開發(fā) ASP.NET Core 應(yīng)用程序時(shí),應(yīng)該充分利用 DI 容器,提高代碼的質(zhì)量和效率。

到此這篇關(guān)于ASP.NET Core依賴注入DI容器的方法實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)ASP.NET Core依賴注入DI容器內(nèi)容請(qǐng)搜索以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持!

標(biāo)簽: ASP.NET
主站蜘蛛池模板: 在线 中文字幕 日韩 欧美 | 亚洲美女自拍视频 | 日本一区午夜爱爱 | 欧美性生交大片免费看 | 欧美aaaaa激情毛片 | 欧美性猛交xxxxbbb | 精品日本一区二区三区在线观看 | 欧美国产亚洲一区 | 欧美精品成人久久网站 | 国产福利在线91 | 香蕉久久久久 | 精品久久久久久中文字幕一区 | 最新国产午夜精品视频不卡 | 国产成人久久综合热 | 那里有黄色网址 | 久久精品国产99国产精品亚洲 | 国产一级一级片 | 精品一区二区三区在线观看 | 另类视频在线 | 亚洲成a人片在线观看 欧美 | 高清精品女厕在线观看 | 欧美极品第1页专区 | 国产91丝袜在线播放九色 | 在线成人天天鲁夜啪视频 | 亚洲精品a | 99精品视频一区在线观看miya | 京野结衣免费一区二区 | 亚洲天堂视频一区 | 亚洲精品中文一区不卡 | 亚洲欧美日韩国产综合 | 国产成人精品综合在线 | 一级特黄a视频 | 久久国产成人精品麻豆 | 亚洲第一成人天堂第一 | 92看片淫黄大片一级 | 免费观看a毛片一区二区不卡 | 国产精品一区二区丝瓜 | 亚洲欧美18v中文字幕高清 | 中文字幕亚洲国产 | 亚洲精品系列 | 亚洲免费精品视频 |