[.net core 2]在.net core如何定義config還有如何去讀取
前言
因為最近有一個專案是用.net core2去做的,算是公司內部在使用的網站,所以就開始花點時間研究起了.net core 2,老實說很多套件還不支援,甚至已經寫好的元件庫,在.net core 2有很大的機率無法順利使用,甚至也少了我們以前熟悉的web.config了,那我們的常數要寫在哪邊呢?
appsettings.json
沒錯目前已經都是用json來定義config的內容了,所以就沒有xml的格式了,看一下我自定義的Custom區塊
{
"Logging": {
"IncludeScopes": false,
"Debug": {
"LogLevel": {
"Default": "Warning"
}
},
"Console": {
"LogLevel": {
"Default": "Warning"
}
}
},
"Custom": {
"JiraConfig": {
"Url": "http://localhost:8080/",
"UserName": "anson.shih",
"Password": "2131"
}
}
}
那麼我如何在程式裡面抓到呢?其實很簡單,我們只要使用IConfiguration並注入在建構子裡面就可以了,請看Startup.cs的部份,有一段程式碼如下
public Startup(IConfiguration configuration)
{
Configuration = configuration;
}
public IConfiguration Configuration { get; }
其實我們如果要在程式碼使用的話,也可以直接在建構子注入,就可以使用了,但是如果我們在自定義的dll裡面又該怎麼辦呢?我們可以在nuget下載如下package
接著如果我要讀取我定義的json格式,只要如下方式使用即可。
IConfiguration _configuration;
public TestService(IConfiguration configuration)
{
_configuration = configuration;
var url = _configuration["Custom:JiraConfig:Url"];
var username = _configuration["Custom:JiraConfig:UserName"];
var password = _configuration["Custom:JiraConfig:Password"];
}
如果我們的json有陣列格式如下的話
"Custom": {
"JiraConfig": {
"Url": "http://localhost:8080/",
"Users": [
{
"UserName": "anson.shih",
"Password": "2131"
},
{
"UserName": "kinanson",
"Password": "2131"
}
]
}
}
那我們就可以改成這樣子去取囉
var username1 = configuration["Custom:JiraConfig:Users:0:UserName"];
var username2 = configuration["Custom:JiraConfig:Users:1:UserName"];
用強型別的方式來讀取appsettings.json
首先我按照上述的json來定義相對應的類別
public class JiraConfigModel
{
public static string Url { get; set; }
public static List<Users> Users { get; set; }
}
public class Users
{
public static string UserName { get; set; }
public static string Password { get; set; }
}
接著在把Startup裡面的建構式改成如下
public Startup(IConfiguration configuration)
{
Configuration = configuration;
var appConfig = new JiraConfigModel();
configuration.GetSection("Custom:JiraConfig").Bind(appConfig);
Debug.WriteLine($"Url is {appConfig.Url}");
Debug.WriteLine($"User1 is {appConfig.Users[0].UserName}");
Debug.WriteLine($"User2 is {appConfig.Users[1].UserName}");
}
結果如下
結論
如果有任何更好的做法,再請指教筆者囉。