[ASP.NET] appsettings.json 에 정의된 특정 section을 class에 Mapping해서 사용하기

ASP.NET 으로 개발 할 때는 WebApplication builder가 해당 파일을 읽어와서 ConfigurationManager 클래스로 접근을 제공해 주기 때문에 보통 따로 json 설정 파일을 구성해서 따로 파일을 읽어온다음 특정 class로 Deserialize해서 사용하지는 않습니다.
 
하지만, 설정 항목이 몇 개 안되는 경우에는 문제가 없지만 조금 복잡하거나 property수가 많은 경우에는 정의된 class에 맵핑된 instance를 사용하는게 개발할 때 훨씬 편리하죠.
 
예를들어 설정파일이 아래와같을 때,
appsettings.json

{
  "Logging": {
    "LogLevel": {
      "Default": "Information",
      "Microsoft.AspNetCore": "Warning"
    }
  },
  "AllowedHosts": "*",
  "MyConfig": {
    "Host": "localhost",
    "Port": 4500
  }
}

 
Host와 Port의 값을 가져올려면 아래와 같은 코드가 필요하죠

var host = builder.Configuration["MyConfig:Host"];
var port = int.Parse(builder.Configuration["MyConfig:Port"]);

 
이걸 MyConfig라는 class를 선언한 다음 appsettings.json의 "MyConfig" section을 MyConfig class의  instance로 casting해서 사용 하려면 아래와 같은 방법으로 가능합니다.

    public class MyConfig
    {
        public string Host { get; set; }
        public int Port { get; set; }
    }
using Newtonsoft.Json.Linq;

var myconfig = builder.Configuration.GetSection("MyConfig").Get<MyConfig>();
    
var host = myconfig.Host;
var port = myconfig.Port;

property 수가 많거나 nested property가 많은 경우 이런식으로 modeling을 해서 encapsulation된 instance를 사용하는 편이 개발할 때 훨씬 편리합니다.