.NET Core設定檔
在以前.NET中設定檔都是以App.config / Web.config等XML格式的設定檔,而.NET Core中建議使用以JSON為格式的設定檔,因為使用起來更加方面靈活,而且可以使用.NET Core中的DI注入配置資料。
使用:
var config = new ConfigurationBuilder() .AddInMemoryCollection() //將設定檔的資料載入到記憶體中 .SetBasePath(Directory.GetCurrentDirectory()) //指定設定檔所在的目錄 .AddJsonFile("appsettings.json", optional: true, reloadOnChange: true) //指定載入的設定檔 .Build(); //編譯成對象 Console.WriteLine(config["test"]); //擷取配置中的資料 config["test"] = "test test"; //修改設定物件的資料,設定物件的資料是可以被修改的 Console.WriteLine(config["test11"]); //擷取設定檔中不存在資料也是不會報錯的 Console.WriteLine(config["theKey:nextKey"]); //擷取:theKey -> nextKey 的值
設定檔appsettings.json檔案內容:
{ "test": "testVal", "theKey": { "nextKey": "keyVal" }}
注意:
ConfigurationBuilder需要添加包:"Microsoft.Extensions.Configuration"
AddJsonFile需要添加包:"Microsoft.Extensions.Configuration.Json"
與DI配合使用
var sp = new ServiceCollection() .AddOptions() //注入IOptions<T>,這樣就可以在DI容器中擷取IOptions<T>了 .Configure<TestCls>(config.GetSection("TestCls")) //注入配置資料 //也可以對注入的配置資料進行修改 .Configure<TestCls>(t => { t.Name = "Jame"; //修改Name的值 }) .BuildServiceProvider(); //編譯 var test = sp.GetService<IOptions<TestCls>>(); //擷取注入的配置資料對象 Console.WriteLine(JsonConvert.SerializeObject(test.Value)); //{"Name":"Jame","Age":123} //下面的代碼中檢驗Configure注入的配置資料對象是單例模式的(.NET Core中DI容器的三種生命週期:Singleton(單例), Scoped(範圍), Transient(瞬態)) var test1 = sp.GetService<IOptions<TestCls>>(); Console.WriteLine(test == test1); //true //建立一個新的範圍擷取配置資料對象 var test2 = sp.GetService<IServiceScopeFactory>().CreateScope().ServiceProvider.GetService<IOptions<TestCls>>(); Console.WriteLine(test == test2); //true
配置測試類別:
public class TestCls { public string Name { get; set; } public int Age { get; set; } }
appsettings.json中的內容:
{ "TestCls": { "Name": "Tom", "Age": 123 }}
注意:
ServiceCollection需要添加包: "Microsoft.Extensions.DependencyInjection"
AddOptions需要添加包: "Microsoft.Extensions.Options.ConfigurationExtensions"
ASP.NET Core中使用
Startup.cs -> Startup構造方法中進行初始化設定檔:
var builder = new ConfigurationBuilder() .AddInMemoryCollection() .SetBasePath(env.ContentRootPath) .AddJsonFile("appsettings.json", optional: true, reloadOnChange: true) .AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true); Configuration = builder.Build();
Startup.cs -> ConfigureServices方法中進行注入配置資料:
services.AddOptions() //注入IOptions<T> .Configure<TestCls>(Configuration.GetSection(nameof(TestCls))) .Configure<TestCls>(test => { test.Name = "Jame"; //修改Name的值 });
設定檔中的配置資料:
{ "Logging": { "IncludeScopes": false, "LogLevel": { "Default": "Debug", "System": "Information", "Microsoft": "Information" } }, "TestCls": { "Name": "Tom", "Age": 123 }}
注入到控制器中:
[Route("api/[controller]")] public class ValuesController : Controller { IOptions<TestCls> _test; public ValuesController(IOptions<TestCls> test) { _test = test; } [HttpGet] public string Gets() { return JsonConvert.SerializeObject(_test.Value); }
訪問:/api/values
顯示:{"Name":"Jame","Age":123}
【相關推薦】
1. .Net Core 之 圖形驗證碼
2. .NET Core CLI工具文檔dotnet-publish
3. 詳細介紹ZKEACMS for .Net Core
4. 分享.net MVC中使用forms驗證執行個體代碼
5. 在.net core 下如何進行http請求?
6. CentOS上運行ZKEACMS的執行個體教程