文章目錄
在 ASP.NET Core Configuration 中使用 array
這是之前專案遇到的需求:在 config 中設定多個值來供 application 使用,印象中之前有用過但沒找到筆記,順便嘗試一下不同做法,筆記一下
基本環境說明
- macOS Monterey 12.1
- .NET SDK 6.0.100
範例 config
{ "ConfigArray": ["Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","Sunday"] }
使用方式
使用
IConfiguration
var configs= app.Configuration.GetSection("ConfigArray").Get<string[]>();
完整程式碼
Program.cs
var builder = WebApplication.CreateBuilder(args); // Add services to the container. builder.Services.AddControllers(); // Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle builder.Services.AddEndpointsApiExplorer(); builder.Services.AddSwaggerGen(); var app = builder.Build(); var configs= app.Configuration.GetSection("ConfigArray").Get<string[]>(); foreach (var config in configs) { Console.WriteLine(config); } // Configure the HTTP request pipeline. if (app.Environment.IsDevelopment()) { app.UseSwagger(); app.UseSwaggerUI(); } app.UseHttpsRedirection(); app.UseAuthorization(); app.MapControllers(); app.Run();
使用
Options pattern
建立對應的 poco
需要讓 porperty name 與 config key 一致才能正確綁定
namespace ArrayConfig; namespace ArrayConfig; public class Weekdays { public string[] ConfigArray { get; set; } = Array.Empty<string>(); }
註冊 config
builder.Services.Configure<Weekdays>(builder.Configuration);
取用 config array
var configs=app.Services.GetRequiredService<IOptions<Weekdays>>()?.Value.ConfigArray;
完整程式碼
Program.cs
using ArrayConfig; using Microsoft.Extensions.Options; var builder = WebApplication.CreateBuilder(args); // Add services to the container. builder.Services.AddControllers(); // Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle builder.Services.AddEndpointsApiExplorer(); builder.Services.AddSwaggerGen(); builder.Services.Configure<Weekdays>(builder.Configuration); var app = builder.Build(); var configs=app.Services.GetRequiredService<IOptions<Weekdays>>()?.Value.ConfigArray; foreach (var config in configs) { Console.WriteLine(config); } // Configure the HTTP request pipeline. if (app.Environment.IsDevelopment()) { app.UseSwagger(); app.UseSwaggerUI(); } app.UseHttpsRedirection(); app.UseAuthorization(); app.MapControllers(); app.Run();
心得
就程式碼數量來看絕對是直接從 IConfiguration
取用完勝,但 Options pattern
有強型別的好處也不失為種好做法,但兩者在使用上需要注意個問題,詳細內容請參考 ASP.NET Core Configuration 中的 array 沒有正確覆寫
完整程式碼請參考 yowko/ArrayConfig
參考資訊
文章作者 Yowko Tsai
上次更新 2022-01-20
授權合約
本部落格 (Yowko's Notes) 所有的文章內容(包含圖片),任何轉載行為,必須通知並獲本部落格作者 (Yowko Tsai) 的同意始得轉載,且轉載皆須註明出處與作者。
Yowko's Notes 由 Yowko Tsai 製作,以創用CC 姓名標示-非商業性-相同方式分享 3.0 台灣 授權條款 釋出。