반응형
옵션 클래스:
- 매개 변수가 없는 public 생성자를 사용하는 비추상이어야 합니다.
- 형식의 모든 공용 읽기-쓰기 속성이 바인딩됩니다.
- 필드가 바인딩되지 않습니다. 위 코드에서 Position은 바운딩되지 않습니다. Position 필드를 사용하므로 클래스를 구성 공급자에 바인딩할 때 문자열 "Position"을 앱에서 하드 코딩하지 않아도 됩니다.
public class PositionOptions
{
public const string Position = "Position";
public string Title { get; set; } = String.Empty;
public string Name { get; set; } = String.Empty;
}
# JSON - appsettings.json
"Position": {
"Title": "Editor",
"Name": "Joe Smith"
}
1. ConfigurationBinder.Bind
var positionOptions = new PositionOptions();
Configuration.GetSection(PositionOptions.Position).Bind(positionOptions);
2. ConfigurationBinder.Get<T>
var positionOptions = Configuration.GetSection(PositionOptions.Position).Get<PositionOptions>();
3. IoC(Inversion of Control)
// Program.cs
builder.Services.Configure<PositionOptions>(
builder.Configuration.GetSection(PositionOptions.Position));
// class
public class test
{
private readonly PositionOptions _options;
private readonly PositionOptions _optionsSnapshot;
private readonly IOptionsMonitor<PositionOptions> _optionsDelegate;
public test(
IOptions<PositionOptions> options,
IOptionsSnapshot<PositionOptions> optionsSnapshot,
IOptionsMonitor<PositionOptions> optionsDelegate
)
{
_options = options.Value;
_optionsSnapshot = optionsSnapshot.Value;
_optionsDelegate = optionsDelegate;
}
}
1) IOptions<TOptions>:
- 다음을 지원하지 않습니다.
- 앱이 시작된 후 구성 데이터 읽기
- 명명된 옵션
- Singleton으로 등록되며 서비스 수명에 주입할 수 있습니다.
2) IOptionsSnapshot<TOptions>:
- 모든 요청에서 옵션을 다시 계산해야 하는 시나리오에서 유용합니다. 자세한 내용은 IOptionsSnapshot을 사용하여 업데이트된 데이터를 참조하세요.
- 범위 지정됨으로 등록되므로 Singleton 서비스에 주입할 수 없습니다.
- 명명된 옵션을 지원합니다.
3) IOptionsMonitor<TOptions>:
- 옵션을 검색하고 TOptions 인스턴스에 대한 옵션 알림을 관리하는 데 사용됩니다.
- Singleton으로 등록되며 서비스 수명에 주입할 수 있습니다.
- 지원:
- 변경 알림
- 명명된 옵션
- 다시 로드할 수 있는 구성
- 선택적 옵션 무효화(IOptionsMonitorCache<TOptions>)
3. AddOption
builder.Services.AddOptions<PositionOptions>()
.Bind(builder.Configuration.GetSection(PositionOptions.Position))
.ValidateDataAnnotations()
.ValidateOnStart();
4. Program.cs 에서 options 읽기
var app = builder.Build();
var option1 = app.Services.GetRequiredService<IOptionsMonitor<MyOptions>>()
.CurrentValue.Option1;
반응형
'Dev > dotnet core' 카테고리의 다른 글
dotnet middleware 순서 (0) | 2023.07.05 |
---|---|
dotnet user-secrets (0) | 2023.05.24 |
vault v2 api (0) | 2023.04.20 |
Entityframwork core Parameter value 확인 (0) | 2023.04.11 |