[英]Using ApplicationDbContext with DI from appsettings.json
[英]How to default provider from appsettings.json using if else?
我有2個提供者,如下所示。 如果“ IsDefaultProvider”部分為“ true”,我想在注入IConfiguration時獲取其值。
我寫下面的代碼我不能工作
var providers = configuration.GetSection("X:Providers");
foreach(var provider in providers.)
{
if (providers.GetSection("IsDefaultProvider").Value == "true")
{
_defaultProvider = (XProviderType)Enum.Parse(typeof(XProviderType), provider.Value.ToString());
}
}
Appsettings.json
"X": {
"Providers": [
{
"IsDefaultProvider": false,
"Name": "***",
"BaseUrl": "https://*",
"ApiKey": "*****",
"SecretKey": "****"
},
{
"IsDefaultProvider": true,
"Name": "*****",
"BaseUrl": "http://*"
}
]
}
appsettings.json
Configuration從appsettings.json
映射到Provider
,請嘗試按照以下步驟操作:
定義Provider
模型
public class Provider { public bool IsDefaultProvider { get; set; } public string Name { get; set; } public string BaseUrl { get; set; } public string ApiKey { get; set; } public string SecretKey { get; set; } } public class X { public List<Provider> Providers { get; set; } }
獲取默認提供者
var providers = Configuration.GetSection("X").Get<X>(); foreach (var provider in providers.Providers) { if (provider.IsDefaultProvider == true) { //var _defaultProvider = (XProviderType)Enum.Parse(typeof(XProviderType), provider.Value.ToString()); } }
您在問題中顯示的代碼中存在兩個問題:
providers.
不編譯。 我希望這可能是一個糟糕的復制粘貼,但我指出是為了以防萬一,因為它應該是providers.GetChildren()
。 True
而不是true
,因此您需要對此進行比較(或者不區分大小寫)。 這是一個工作示例:
var providers = configuration.GetSection("X:Providers");
foreach (var provider in providers.GetChildren())
{
if (provider.GetSection("IsDefaultProvider").Value.ToLower() == "true")
{
_defaultProvider = ...
}
}
我也將換用GetSection("IsDefaultProvider")
,只是因為IsDefaultProvider
不是一個節:它是一個屬性。 這是一個如何稍微簡化代碼的示例:
if (provider["IsDefaultProvider"].ToLower() == "true")
綜上所述,如果您不反對創建其他類, Tao Zhou的答案是一種更加類型安全的方式來處理此過程,因此,我鼓勵您考慮使用他的方法。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.