.NET Core - 配置綁定:使用強類型對象承載配置數據

配置綁定

本節學習,配置綁定---使用強類型對象承載配置數據,這樣做的目的是爲了更方便的管理配置對象。因爲,這意味着,我們可以直接從對象來查看配置的信息。如下,我們有一個json配置文件

{
  "key1": "value1",
  "key2": 0,
  "Section1": {
    "key3": "value3",
    "key4": 10,
    "key5": true
  }
}

我們先定義一個用來承載配置的類,將其定義爲ConfigModel

class ConfigModel
{
    public String key1 { get; set; }
    public int key2 { get; set; }
    public int key4 { get; set; }
    public bool key5 { get; private set; } = false;
}

首先,我們利用文件提供程序類型來加載配置

IConfigurationBuilder configurationBuilder = new ConfigurationBuilder();
configurationBuilder.AddJsonFile("settings.json");

IConfigurationRoot configurationRoot = configurationBuilder.Build();

配置綁定我們通過Bind方法,如下,我們給ConfigModel來賦值初始值,以便與最後的結果做比較

ConfigModel configModel = new ConfigModel() { key1 = "value1new", key2 = 10 ,key4=30};
//可以進行對此綁定,應該還可以綁定到不同的對象。
configurationRoot.Bind(configModel);

我們可以同時將配置綁定到多個對象,比如,我們可能加載了多個配置文件,或者以配置文件的多個Section等來區分,我們可以進行多次綁定

ConfigModel configModel = new ConfigModel() { key1 = "value1new", key2 = 10 ,key4=30};
//可以進行對此綁定,應該還可以綁定到不同的對象。
configurationRoot.Bind(configModel);
//獲取節,並綁定
configurationRoot.GetSection("Section1").Bind(configModel);
//...

私有變量/方法的處理

如上,ConfigModel中的key5的set方法是private的,也就意味着,我們在類外部無法直接調用其set方法,那麼,我們該如何將配置文件中的值賦值到類呢?

這裏,我們需要用到BinderOptions。Bind()帶有第二個參數BinderOptions,可以讓我們指定綁定選項。如我們要給key5賦值

configurationRoot.GetSection("Section1").Bind(configModel,options=> { options.BindNonPublicProperties = true; });

這裏options.BindNonPublicProperties = true代表我們允許綁定私有屬性。

這樣我們就可以獲取到私有變量的值了。

 

其實,在實際的開發過程中,我們一般都會用類來承載我們的配置,因爲這樣,不僅可以更直觀的瞭解配置,而且便於對配置進行管理。下面一節,學習如何低成本實現自定義的配置源。

 

源碼可訪問

https://github.com/IronMarmot/Samples/tree/master/CoreSamples

更多課程詳細內容,可識別下方二維碼購買。

掃描二維碼購買課程,可後臺留言獲得10元紅包返現。

                                        

部分內容來源於網絡,侵刪。

更多精彩內容,請微信搜索攻城獅客棧 或掃描下方二維碼

------------------------------------------------------------------------------

公衆號:攻城獅客棧

CSDN:畫雞蛋的不止達芬奇

 

                                                                 

讓我們一起變的更優秀。


 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章