Options 패턴
options 패턴은 세팅 데이터(configuration data)에 접근하도록 도와주는 강력한 도구이다. 즉, 프로그래머가 클래스를 정의하고 option 패턴을 이용해서 설정 파일에서 값을 가져와서 바인딩하면 이를 인스턴스 객체로 선언해서 사용이 가능하게 만든다.
appsettings.json 파일
appsettings.json에 정의된 "Units" 내용
"Units": {
"Temp": "Celsius",
"Distance": "Miles"
}
바인딩 클래스 만들기
Option 패턴을 사용하기 위해서 클래스를 생성한다.
public class UnitOptions
{
public string Temp { get; set; } = String.Empty;
public string Distance { get; set; } = String.Empty;
}
Startup.cs에서 Configure를 호출해서 클래스와 appsettings.json의 데이터를 바인딩해 준다.
// Startup.cs
builder.Services.Configure<UnitOptions>(builder.Configuration.GetSection("Units"));
Option 패턴 사용 예제
IOption은 싱글톤으로 존재하며 서비스가 실행되는 동안 설정 데이터를 가져오는 역할을 한다. 싱글톤으로 존재하기 때문에 앱이 실행된 이후에는 해당 설정 데이터는 변경될 수 없다.
public class TransientService
{
private readonly UnitOptions _unitOptions;
public TransientService(IOptions<UnitOptions> unitOptions)
{
_unitOptions = unitOptions.Value;
}
public UnitOptions GetUnits()
{
return _unitOptions;
}
}
IOption vs IConfiguration
기존에 잘 쓰고 있던 IConfiguration이 있는데 왜 IOption에 대해서 알아야 할까?
이는 설정 데이터를 가지고 있는 IConfiguration 전체를 주입하지 않고 IConfiguration의 일정 부분만 선택해서 바인딩해서 별도의 서비스에서 사용이 가능하기 때문이다.
- 가독성 측면에서 유리하다. 파악해야 하는 내용이 적어진다.
- 전체(IConfiguration)보다는 특정 부분(IOption)에 대해서 의존하는 게 변경에 유리하다.
함께 읽으면 좋은 글
참고 사이트
'프로그래밍 > C#' 카테고리의 다른 글
C# 비동기 프로그래밍으로 반응성 개선하기 (0) | 2024.04.11 |
---|---|
C# 모나드 설계 패턴 소개 (1) | 2024.04.09 |
상황별로 appsettings.json 선택적으로 읽기 (0) | 2024.04.08 |
C# 메모화(Memoization) (0) | 2024.04.05 |
C# 지연 초기화(lazy initialization) (0) | 2024.04.04 |
댓글