[英]Read and use appsettings parameters in a windows forms .net 6 application
從 windows forms .net 7 應用程序中的 appsettings 讀取值的最佳做法是什么? 我找到了控制台應用程序的示例,但它不起作用。
假設這是針對appsettings.json
的,使用以下文件
{
"Role": {
"IsAdmin": true
},
"LogOptions": {
"Use": true,
"Destination": "LogFile",
"LogFileName": "logs.txt"
},
"FormSettings": {
"Title": "Code sample",
"FullScreen": "true"
}
}
使用以下類從appsettings.json
獲取值
public class FormSettings
{
public string Title { get; set; }
public bool FullScreen { get; set; }
}
public class Role
{
public bool IsAdmin { get; set; }
}
public class Logging
{
public bool Use { get; set; }
public LoggingDestination Destination { get; set; }
public string LogFileName { get; set; }
}
public enum LoggingDestination
{
DebugWindow,
LogFile,
None
}
Class 從appsettings.json
讀取設置
public class AppSettings
{
private static ConfigurationBuilder _configBuilder;
public static Logging GetLogOptions()
{
Build();
return InitOptions<Logging>("LogOptions");
}
public static Role Role()
{
Build();
return InitOptions<Role>("Role");
}
public static FormSettings Settings()
{
Build();
return InitOptions<FormSettings>("FormSettings");
}
private static IConfigurationRoot Build()
{
if (_configBuilder is not null) return _configBuilder.Build();
_configBuilder = new ConfigurationBuilder();
_configBuilder.SetBasePath(Directory.GetCurrentDirectory())
.AddJsonFile("appsettings.json", true, true);
return _configBuilder.Build();
}
public static T InitOptions<T>(string section) where T : new()
=> Build().GetSection(section).Get<T>();
}
用法
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
Text = AppSettings.Role().IsAdmin
? AppSettings.Settings().Title + " (Admin)"
: AppSettings.Settings().Title ;
}
private void GetLogInfoButton_Click(object sender, EventArgs e)
{
if (AppSettings.GetLogOptions().Use && AppSettings.GetLogOptions().Destination == LoggingDestination.LogFile)
{
MessageBox.Show($"{AppSettings.GetLogOptions().LogFileName}");
}
}
}
NuGet 包
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.