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