這是我的應用設定
{
"Messages": {
"ApiUrl": "demo",
"ApiKey": {
"Key": "key",
"Value": "1234"
}
}
}
型號分類:
public class CPSSettings
{
public Messages Messages { get; set; } = null!;
}
public class Messages
{
public string ApiUrl { get; set; } = null!;
public KeyValuePair<string?, string?> ApiKey{ get; set; }
}
我沒有得到_settings.Messages.ApiKey.Key和的價值_settings.Messages.ApiKey.Value
但為 接收值ApiUrl。我有 KeyValuePair 沒有收到值的問題
public testClient(IOptions<CPSSettings> options)
{
_settings = options.Value;
}
//...
if (_settings.Messages.ApiKey.Key is not null
&& _settings.Messages.ApiKey.Value is not null)
{
var s = _settings.Messages.ApiKey.Key; // am getting null vaues in both
var s1 = _settings.Messages.ApiKey.Value
}
uj5u.com熱心網友回復:
KeyValuePair的成員是只讀的。初始化結構后,框架無法設定這些值
我建議您使用您控制的另一種物件型別。一種具有可修改成員的。
例如
public class CPSSettings {
public Messages Messages { get; set; } = null!;
}
public class Messages {
public string ApiUrl { get; set; } = null!;
public ApiKey ApiKey{ get; set; } //<-- NOTE THE CHANGE
}
public class ApiKey {
public string? Key { get; set; }
public string? Value { get; set; }
}
這樣,在系結設定時,框架就可以初始化并正確設定成員的值
uj5u.com熱心網友回復:
洗掉CPSSettings將簡化場景。請參閱下文,了解如何通過.NET 中的選項模式訪問配置值,使用Messages:
- 確保您已
Messages在Startup.ConfigureServices(...)(以下示例)內注冊。
services.Configure<Messages>(Configuration.GetSection("Messages"));
IOptions<Messages>作為testClient建構式引數接收(下面的示例)。
public testClient(IOptions<Messages> options)
{
_settings = options.Value;
}
uj5u.com熱心網友回復:
KeyValuePair 的成員是只讀的。您可以使用它,但您必須進行一些轉換。我不認為你真的需要它。所以我創建了另一個類來替換它。您還必須使用 Messages 類來反序列化設定。類 CPSSettings 是一個錯誤,您不需要它。所以試試這個代碼,它在 Visual Studio 中進行了測驗。
var cpsSettingsSection = configuration.GetSection("Messages");
var cpsSettings = cpsSettingsSection.Get<Messages>();
var url = cpsSettings.ApiUrl;
var key = cpsSettings.ApiKey.Key.Dump();
var value = cpsSettings.ApiKey.Value.Dump();
//services.Configure<Messages>(cpsSettingsSection);
}
public class Messages
{
public string ApiUrl { get; set; }
public KeyValueString ApiKey {get; set;}
}
public class KeyValueString
{
public string Key { get; set; }
public string Value { get; set; }
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/372178.html
上一篇:NUnitCustomAttribute始終將TestName顯示為AdHockTestMethod。我該如何解決?
