0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

MiniAPI(四):Configuration

Last updated at Posted at 2024-02-14

設定ファイルは、各アプリケーションサービスプログラムが共通して使用する機能です。元の端末アプリケーション時代から現在のメタバース時代に至るまで、設定は自然に存在しています。asp.net coreは、強力な設定ファイルアクセスメカニズムを提供しており、MVC APIでもMiniAPIでも、使用方法は同じです。
フレームワークのデフォルト設定ファイルはappsettings.jsonで、json形式で独自の複雑な設定を保存できます:

{
  "Logging": {
    "LogLevel": {
      "Default": "Information",
      "Microsoft.AspNetCore": "Warning"
    }
  },
  "AllowedHosts": "*",
  "ConnectionStrings": {
    "ExamDatabase": "server=.;database=Exam;uid=sa;pwd=sa;"
  },
  "AppInfo": {
    "Name": "Mini & Powerful",
    "Version": "v1.0.0",
    "Author": {
      "Architect": "桂素伟-A",
      "Programmer": "桂素伟-P",
      "Designer": "桂素伟-D"
    },
    "Features": [ "Learn MiniAPI", "Architect Element" ]
  }
}

簡単に値を取得します

var architect = builder.Configuration.GetSection("AppInfo:Author:Architect").Value;
var features1 = builder.Configuration.GetSection("AppInfo:Features:1").Value;

recordでバインドします

public record AppInfoRecord(string? Name, string? Version, AuthorRecord? Author, string[]? Features);
public record AuthorRecord(string? Architect, string? Programmer, string? Designer);

バインド

var authorRecord = new AuthorRecord(null, null, null);
var appInfoRecord = new AppInfoRecord(null, null, authorRecord, null);
builder.Configuration.GetSection("AppInfo").Bind(appInfoRecord);

結果
alt 画像

classでバインドします

public class AppInfo
{
    public string? Name { get; set; }
    public string? Version { get; set; }
    public Author? Author { get; set; }
    public string[]? Features { get; set; }
}

public class Author
{
    public string? Architect { get; set; }
    public string? Programmer { get; set; }
    public string? Designer { get; set; }
}

バインド

var appInfo = new AppInfo();
builder.Configuration.GetSection("AppInfo").Bind(appInfo);

結果
alt 画像

recordclassでバインドすると、それぞれに利点があります。recordによる定義は、コードがシンプルでバインドがやや複雑になります。一方、classの定義はやや複雑で、バインド時にシンプルです。

IConfigurationから設定を取得します。
ルーティングメソッドで設定情報を取得できます。

app.MapGet("/getappinfo", (IConfiguration config) =>
{
    return config.GetSection("AppInfo:Name").Value;
});

ルーティングから設定ファイルを取得します。
最初は注入します。

var authorRecord = new AuthorRecord(null, null, null);
var appInfoRecord = new AppInfoRecord(null, null, authorRecord, null);
builder.Configuration.GetSection("AppInfo").Bind(appInfoRecord);
builder.Services.AddSingleton(appInfoRecord);

設定データを取得します。

app.MapGet("/appinfo", (AppInfoRecord appinfo) =>
{
    return appinfo;
});

結果
alt 画像

他の形式の設定ファイルを読む
myconfig.ini

[iniconfig]
key1=value1
key2=value2

設定ファイルをロードし、値を取得します。

builder.Host.ConfigureAppConfiguration((hostingContext, config) =>{
    config.AddIniFile("myconfig.ini",
                      optional: true,
                      reloadOnChange: true);
});

var key1 = builder.Configuration.GetSection("iniconfig:key1").Value;

(Translated by GPT)

元のリンク:https://mp.weixin.qq.com/s?__biz=MzA3NDM1MzIyMQ==&mid=2247484817&idx=1&sn=dd4b5d5dced9ac5888c8a3926442078c&chksm=9f005abba877d3adc5c98cc6fd374537de6e41b61d05aac225fb845407c7510bf6580d32e82b&token=2050451386&lang=zh_CN#rd

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?