.NET 8 中的 Keyed Services解鎖依賴注入的新方式(最新推薦)
在.NET 8 發(fā)布之后,依賴注入(Dependency Injection,DI)體系迎來了一個(gè)全新的功能——Keyed Services。這篇博客將帶你探索如何通過Keyed Services來實(shí)現(xiàn)基于特定鍵選擇服務(wù)實(shí)例的方法。
什么是Keyed Services?
傳統(tǒng)的DI容器允許你注冊(cè)服務(wù),但并沒有提供一個(gè)簡單的方式來區(qū)分同一個(gè)接口的不同實(shí)現(xiàn)。Keyed Services的引入解決了這個(gè)問題,它允許你使用鍵(可以是任何類型,包括字符串、枚舉等)來標(biāo)識(shí)不同的服務(wù)實(shí)例。
如何使用Keyed Services?
讓我們以一個(gè)具體的示例來展示如何在.NET 8 中使用Keyed Services。
假設(shè)我們有一個(gè)接口ISampleC,它有兩個(gè)實(shí)現(xiàn):SampleD和SampleE。我們希望根據(jù)一個(gè)枚舉值來選擇具體的實(shí)現(xiàn)。
首先,定義枚舉類型:
public enum ServiceInstanceEnum { SampleE, SampleD }
然后,在Program.cs或Startup.cs中注冊(cè)服務(wù):
builder.Services.AddKeyedScoped<ISampleC, SampleD>(ServiceInstanceEnum.SampleD); builder.Services.AddKeyedScoped<ISampleC, SampleE>(ServiceInstanceEnum.SampleE);
這里,我們使用AddKeyedScoped方法將SampleD和SampleE分別與枚舉值關(guān)聯(lián)起來。
在控制器中使用
在控制器中注入特定服務(wù)實(shí)例:
public class WeatherForecastController : Controller
{
private readonly ISampleC _sampleC;
public WeatherForecastController(
ILogger<WeatherForecastController> logger,
[FromKeyedServices(ServiceInstanceEnum.SampleE)] ISampleC sampleC)
{
_logger = logger;
_sampleC = sampleC;
}
// 控制器的其他方法
}通過[FromKeyedServices]特性,我們可以指定需要注入的ISampleC實(shí)例的鍵值。
好處與限制
好處:
- 更靈活的服務(wù)選擇方式。
- 避免了創(chuàng)建工廠方法或手動(dòng)實(shí)例化服務(wù)的繁瑣。
- 能夠直接利用DI容器管理服務(wù)的生命周期。
限制:
- 需要.NET 8 及以上版本。
- 對(duì)于大量鍵值的管理,可能需要額外的配置和設(shè)計(jì)考慮。
結(jié)論
Keyed Services 是一個(gè)強(qiáng)大的工具,它擴(kuò)展了.NET DI 容器的能力,使得服務(wù)的選擇和注入變得更加直觀和靈活。通過這篇博客的介紹和示例,你應(yīng)該能夠開始在自己的項(xiàng)目中嘗試和使用這一新特性。記住,DI 容器不僅僅是用來注入依賴的,它還可以幫助你管理復(fù)雜的服務(wù)實(shí)例選擇邏輯,提高代碼的可維護(hù)性和可測試性。
到此這篇關(guān)于.NET 8 中的 Keyed Services:解鎖依賴注入的新方式的文章就介紹到這了,更多相關(guān).net Keyed Services依賴注入內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Asp.Net Core中基于Session的身份驗(yàn)證的實(shí)現(xiàn)
這篇文章主要介紹了Asp.Net Core中基于Session的身份驗(yàn)證的實(shí)現(xiàn)2018-09-09
如何在.NET Core中為gRPC服務(wù)設(shè)計(jì)消息文件(Proto)
這篇文章主要介紹了如何在.NET Core中為gRPC服務(wù)設(shè)計(jì)消息文件(Proto),幫助大家更好的理解和學(xué)習(xí)使用.net技術(shù),感興趣的朋友可以了解下2021-05-05
基于asp.net MVC 應(yīng)用程序的生命周期(詳解)
下面小編就為大家分享一篇基于asp.net MVC 應(yīng)用程序的生命周期詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2017-12-12
基于ASP.NET Core數(shù)據(jù)保護(hù)生成驗(yàn)證token示例
本篇文章主要介紹了基于ASP.NET Core數(shù)據(jù)保護(hù)生成驗(yàn)證token,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-02-02

