.NET Core設定檔載入與DI注入配置資料

來源:互聯網
上載者:User

.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的執行個體教程

  • 相關文章

    聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.