| 本篇只是從應(yīng)用角度來說明asp.net core的選項(xiàng)模式,下一篇會(huì)從源碼來分析 1、以前的方式以前我們使用web.config/app.config時(shí)是這樣使用配置的 var count = ConfigurationManager.AppSettings["key"]; 
 寫["key"]操作麻煩,弱類型的還得自己轉(zhuǎn),后來有人做了封裝 public static class ConfigHelper{
  public static T Get<T>(string key){
    return (T)ConfigurationManager.AppSettings[key];
  }
 稍微好了點(diǎn),全能方式,系統(tǒng)任何地方都可以調(diào)用,但是沒有組織,最好是為單獨(dú)的模塊定義一個(gè)類,比如為訂單模塊定義一個(gè)配置類 public static class OrderConfig{
  public static int Opt1{這時(shí)我們在訂單業(yè)務(wù)中隨時(shí)都可以訪問這個(gè)配置,且是強(qiáng)類型的 
 2、asp.net core中的選項(xiàng)模式asp.net core中把這種為小模塊定義的配置類稱為選項(xiàng)模式,我們把這個(gè)配置對(duì)象稱為選項(xiàng)對(duì)象.微軟為我們定義了一些類,這些類相互協(xié)作完成了以下任務(wù): 
 再者選項(xiàng)模式跟依賴注入也沒有必然的聯(lián)系,原因跟上面一樣,但是asp.net core提供的選項(xiàng)模式是建立在依賴注入基礎(chǔ)上的。但又與我們通常理解的有所不同。通常我們是定義接口IA,實(shí)現(xiàn)類A,然后注冊iocContainer.Register<IA,A>(); 然后在使用時(shí)通過構(gòu)造函數(shù)或?qū)傩宰⑷?。所以你可能?huì)認(rèn)為我們?yōu)槟硞€(gè)模塊定義選項(xiàng)時(shí)需要定義一個(gè)選項(xiàng)類,再定義一個(gè)對(duì)應(yīng)的什么接口。其實(shí)不需要,因?yàn)閍sp.net core為我們提供了相應(yīng)的泛型類,具體的看下面部分的說明來理解 2.1、定義選項(xiàng)類public class CloudDiskOption{
  public string AllowFileTypes{ get; set; }
 2.2、定義選項(xiàng)對(duì)象如何賦值asp.net core允許我們自己來定義選項(xiàng)對(duì)象如何賦值,最簡單的方式是使用委托,代碼如下 public void ConfigureServices(IServiceCollection services)
{
    services.Configure<CloudDiskOption>(c=> {
         c.AllowSize = 1024;
         c.AllowFileTypes = "jpg,zip,pdf,docx";
     });
     services.AddControllersWithViews();
}這樣將來我們在需要使用選項(xiàng)類時(shí)asp.net core的選項(xiàng)框架會(huì)使用這個(gè)委托來幫我們創(chuàng)建 但更常見的方式是使用asp.net core提供的配置 {
  "Logging": {
    "LogLevel": {
      "Default": "Information",
      "Microsoft": "Warning",
      "Microsoft.Hosting.Lifetime": "Information"
    }
  },
  "AllowedHosts": "*",
  "myoption": {
    "allowFileTypes": "jpg,zip,pdf,docx",
    "allowSize": "1024"
  }
}你會(huì)看到我故意將選項(xiàng)類名與這里的配置鍵myoption設(shè)置成不一樣,且配置項(xiàng)的大小寫也不對(duì)應(yīng),這些屬于配置部分的內(nèi)容,這里不多講,下面修改我們的Startup類 public void ConfigureServices(IServiceCollection services)
        {
            services.Configure<CloudDiskOption>(Configuration.GetSection("myoption"));
            services.AddControllersWithViews();
        }這樣將來我們需要選項(xiàng)對(duì)象時(shí)系統(tǒng)會(huì)通過配置來創(chuàng)建選項(xiàng)對(duì)象 
 2.3、使用選項(xiàng)對(duì)象通常我們使用以來注入來獲取選項(xiàng)對(duì)象,asp.net core為我們提供了幾個(gè)泛型接口,個(gè)人理解的基本原則如下 
 網(wǎng)上有些文章說IOptionsMonitor<TOptions>是使用得最少的,我反而覺得它應(yīng)該是最常用的 下面我們來看咋用,比如我們希望在controller中訪問選項(xiàng),通過構(gòu)造函數(shù)注入 public class HomeController : Controller
{
        private readonly ILogger<HomeController> _logger;
        CloudDiskOption myOption;
        public HomeController(ILogger<HomeController> logger, IOptionsMonitor<CloudDiskOption> optionsMonitor)
        {
            _logger = logger;
            optionsMonitor.OnChange((a,b)=>
            { 
                //危險(xiǎn)
            });
            this.myOption = optionsMonitor.CurrentValue;
        }這是你的controller對(duì)象的其他action就可以隨便訪問myOption了,可以嘗試修改配置文件后觀察變化 3、總結(jié) 從應(yīng)用的角度來講選項(xiàng)用起來還是非常簡單方便的,兩個(gè)步驟:1定義選項(xiàng)的如何賦值 2使用的地方通過相應(yīng)的泛型接口注入 | 
|  |