創建一個 .NET Core控制台程序
- 添加依賴
- Microsoft.Extensions.Configuration
- Microsoft.Extensions.Configuration.FileExtensions
- Microsoft.Extensions.Configuration.Json
- 添加一個Config文件夾,用來存放自定義配置文件。
- 新建一個json配置文件,名字隨便取。
{
"StudentsOptions": {
"BeginTime": "2020-06-28 21:05:00",
"URL": "http://yezs.wyjycyw.com/report",
"Students": [
{
"Name": "學生姓名",
"Address": "住址",
"Identity": "身份證號碼",
"ParentName": "監護人姓名",
"Mobile": "監護人手機",
"SchoolId": "學校ID"
},{...}
]
}
}
- main函數中加入json文件,如下:
static void Main(string[] args)
{
IConfigurationRoot config = new ConfigurationBuilder()
.SetBasePath(Directory.GetCurrentDirectory())
.AddJsonFile("//Config//students.json", true, true)
.Build();
}
當然到這里,你可以使用Configuration直接讀取,但是我的配置文件比較復雜,有可能是一個對象數組,所以采用Options選項配置會更好一點。
使用Options接口
- 引入Microsoft.Extensions.Options
PM>Package-install Microsoft.Extensions.Options
- 新建一個配置類
public class StudentsOptions
{
public const string name = "StudentsOptions";
public string BeginTime { get; set; }
public string URL { get; set; }
public List<Student> Students { get; set; }
}
- 添加一個Student的實體類,來存放學生信息
public class Student
{
public string Name { get; set; }
public string Identity { get; set; }
public string ParentName { get; set; }
public string Mobile { get; set; }
public string SchoolId { get; set; }
public string Address { get; set; }
}
- 修改Main函數
static void Main(string[] args)
{
IConfigurationRoot config = new ConfigurationBuilder()
.SetBasePath(Directory.GetCurrentDirectory())
.AddJsonFile("//Config//students.json", true, true)
.Build();
var service = new ServiceCollection();
service.Configure<StudentsOptions>(config.GetSection(StudentsOptions.name));
}
此時報錯了,無法從IConfigurationSection轉換成Action<>。
十分不解,最后發現是少了擴展類,Microsoft.Extensions.Options.ConfigurationExtensions
我們通過 NuGet 添加這個
PM>Install-Package Microsoft.Extensions.Options.ConfigurationExtensions
問題得到解決了。
5. 補充后續代碼
static void Main(string[] args)
{
IConfigurationRoot config = new ConfigurationBuilder()
.SetBasePath(Directory.GetCurrentDirectory())
.AddJsonFile("//Config//students.json", true, true)
.Build();
var service = new ServiceCollection();
//注入
service.Configure<StudentsOptions>(config.GetSection(StudentsOptions.name));
var provider = service.BuildServiceProvider();
var studentsOptions = provider.GetService<IOptionsMonitor<StudentsOptions>>().CurrentValue;
}
這樣就可以很方便的把配置文件加載進來了,同時我們可以加上文件系統,對配置文件進行監聽。
6. 備注
如果只是在Main方法使用,其實我們不需要用ServiceCollection來注入,用下面這種方法更方便簡潔。
static void Main(string[] args)
{
IConfigurationRoot config = new ConfigurationBuilder()
.SetBasePath(Directory.GetCurrentDirectory())
.AddJsonFile("//Config//students.json", true, true)
.Build();
var studentsOptions = config.GetSection(StudentsOptions.name).Get<StudentsOptions>();
}