什麼是鍵控服務依賴註入? 在之前的依賴註入中,服務是根據其類型進行註冊和解析的。如果出現同一介面有多個實現怎麼辦呢?這時候就可以使用.NET 8的新功能“鍵控服務依賴註入”。它允許您註冊介面的多個實現,每個實現都與一個唯一鍵相關聯,然後基於該鍵解析所需的實現。 在.NET 8 中的實現 接下來介紹如 ...
什麼是鍵控服務依賴註入?
在之前的依賴註入中,服務是根據其類型進行註冊和解析的。如果出現同一介面有多個實現怎麼辦呢?這時候就可以使用.NET 8的新功能“鍵控服務依賴註入”。它允許您註冊介面的多個實現,每個實現都與一個唯一鍵相關聯,然後基於該鍵解析所需的實現。
在.NET 8 中的實現
接下來介紹如何在APS.NET Core中使用鍵控服務依賴註入。案例將準備一個介面,並且這個介面有兩個類實現,最後使用鍵控服務依賴註入。步驟如下:
1、首先創建一個.NET8的ASP.NET Core項目。這裡選擇Web API項目
2、創建一個介面和兩個類實現。代碼如下:
public interface IStorage
{
void StoreData(string data);
}
public class LocalStorage : IStorage
{
public void StoreData(string data)
{
Console.WriteLine("方法1: " + data);
}
}
public class CloudStorage : IStorage
{
public void StoreData(string data)
{
Console.WriteLine("方法2: " + data);
}
}
3、接下來我們在Program.cs使用鍵控服務註冊。代碼如下:
builder.Services.AddKeyedSingleton<IStorage, LocalStorage>("Fun1");
builder.Services.AddKeyedSingleton<IStorage, CloudStorage>("Fun2");
4、在所需的控制器中使用構造函數註入。代碼如下:
private readonly IServiceProvider _serviceProvider;
public WeatherForecastController( IServiceProvider serviceProvider)
{
_serviceProvider = serviceProvider;
}
//調用控制器使用微軟創建的預設控制器
5、在方法中調用兩個實現。代碼如下:
var storage = _serviceProvider.GetRequiredKeyedService<IStorage>("Fun1");
storage.StoreData("歡迎關註公眾號:DOTNET開發跳槽");
var storage2 = _serviceProvider.GetRequiredKeyedService<IStorage>("Fun2");
storage2.StoreData("歡迎關註公眾號獲取全真面試題");
6、運行網站查看效果。如下:
是否支持.NET7呢?小編把項目改成.NET7後報錯了。如下:
結語
.NET 8鍵控服務依賴項註入功能彌補了之前版本介面不能多個實現的缺陷。鍵控服務依賴項註入提供了一種強大的機制來管理和解析介面的多個實現。它允許開發人員根據提供的密鑰選擇特定的實現,從而實現更靈活、更高效的應用程式設計。希望本文對大家有所幫助,大家對.NET 8鍵控服務依賴項註入有什麼看法,歡迎留言討論。
參考:
1、c-sharpcorner.com/article/keyed-dependency-injection-in-net-8/
2、learn.microsoft.com/zh-cn/aspnet/core/fundamentals/dependency-injection?view=aspnetcore-8.0
推薦閱讀
1、.NET 8使用牛逼的AOT發佈ASP.NET Core應用
來源公眾號:DotNet開發跳槽❀