簡體   English   中英

在一個windows forms .net 6應用程序中讀取和使用appsettings參數

[英]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 包

  • Microsoft.Extensions.Configuration
  • Microsoft.Extensions.Configuration.FileExtensions
  • Microsoft.Extensions.Configuration.Json

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM