Notice
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | |
7 | 8 | 9 | 10 | 11 | 12 | 13 |
14 | 15 | 16 | 17 | 18 | 19 | 20 |
21 | 22 | 23 | 24 | 25 | 26 | 27 |
28 | 29 | 30 |
Tags
- otel
- 옵션 패턴
- user-secrets
- User
- log
- IDX Project
- Linux
- golang
- go
- version 2
- 윈도우즈 터미널
- opentelemetry
- sqlc
- vscode
- 무선 디버깅
- SQL Server
- module upgrade
- option pattern
- AnimatedPositioned
- mysql
- rc-service
- docker
- Flutter
- DotNet
- elasticSearch
- shared_preload_libraries
- pg_stat_statements
- openrc
- 맥미니
- Android
Archives
- Today
- Total
CATCHV Blog
옵션 패턴(Option pattern) 본문
반응형
옵션 클래스:
- 매개 변수가 없는 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 |
Comments