ASPで設定値を読む方法.ネットコア


ASP .ネットコアは、多くの新機能、以前のバージョンをもたらした.他の機能の中でも、新しいプロジェクトファイル、依存関係コンテナがあります.設定も変更しました.ASPで設定値を読み書きする方法を見ましょう.ネットコア.
ASP . NETで設定値を読み取るには.NETコアでは、オプションパターンを実装する必要があります.ないConfigurationManager からの設定値を読み込むクラスweb.config ファイル.ASP .NETコアはJSONファイルを導入しました.オプションパターンを実装するには、appsetttings.json デフォルトの依存関係コンテナーを使用して、コード内の読み取り値を受け取ります.

それらはマカロンのオプションです.オプションパターンではない.写真でVered Caspi on Unsplash

オプションパターン


設定値を読み込むオプションパターンを実装する方法を見てみましょう.まず、appsettings.json ファイルを設定したい値.以前のバージョンのASPとは異なり.あなたの値をグループ化するセクションとサブセクションを使用することができます.また、文字列のみでなく、Booleans、整数、および配列を使用できます.
{
  "MySettings": {
    "ASetting": "Hello, world!",
    "ABooleanSetting": true,
    "AnIntegerSetting": 1,
    "AnArraySetting": ["hello", ",", "world", "!"]
  }
}
次に、クラスを作成するMySettings . このクラス名はappsettings.json ファイル.また、プロパティ名は、設定ファイルのセクション内の値と一致する必要があります.
public class MySettings
{
    public string ASetting { get; set; }
    public bool ABooleanSetting { get; set; }
    public int AnIntegerSetting { get; set; }
    public string[] AnArraySetting { get; set; }
}
次に、カスタムファイルを設定ファイルとMySettings 設定クラス.にConfigureServices メソッドStartup 使用するクラスConfigure メソッド.このように.
services.Configure<MySettings>(_configuration.GetSection("MySettings"));
注意_configuration フィールドにはStartup クラス.
public class Startup
{
    private IConfiguration _configuration;

    public Startup(IConfiguration configuration)
    {
        _configuration = configuration;
    }

    public void ConfigureServices(IServiceCollection services)
    {
        services.Configure<MySettings>(_configuration.GetSection("MySettings"));

        services.AddControllers();
    }

    public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
    {
        // etc...
    }
}
設定ファイルのサブセクションを使用する場合は:Configure メソッド.例えば、MySettings 区間内だったAllMyCoolSettings , その後、使用する
services.Configure<MySettings>(_configuration.GetSection("AllMyCoolSettings:MySettings"));
デフォルトでは、ASP .NETコア環境変数から設定値を読み込みます.環境変数MySettings__ASettingASetting . 今回はセパレータはダブルアンデスコアです.__ .
これらの設定値を使用するには、IOptions<MySettings> サービスまたはコントローラのコンストラクターのパラメーターです.
[Route("api/[controller]")]
public class ValuesController : Controller
{
    private readonly MySettings _mySettings;

    public ValuesController(IOptions<MySettings> mySettingsOptions)
    {
        _mySettings = mySettingsOptions.Value;
    }

    [HttpGet]
    public string Get(int id)
    {
        return _mySettings.ASetting;
    }
}
それだ!それはアクションのオプションパターンです.テストでは、メソッドを使用できますOptions.Create のインスタンスをMySettings 偽の設定値へのクラス.

複数の環境を使う


環境ごとに設定値を分離できます.開発、QAまたはその他の環境の設定ファイルを持つことができます.環境固有のファイル、ASP . NETで値が見つからない場合.デフォルトではappsettings.json ファイル.
現在の環境をASPNETCORE_ENVIRONMENT 環境変数.開発用マシンでは、使用できますthe launchSettings.json file 環境変数を設定するには
{
  // ...
  "profiles": {
    "IIS Express": {
      "commandName": "IISExpress",
      "launchBrowser": true,
      "environmentVariables": {
        "ASPNETCORE_ENVIRONMENT": "Development"
      }
    },
    "<YourSolutionName>": {
      "commandName": "Project",
      "launchBrowser": true,
      "applicationUrl": "http://localhost:5000",
      "environmentVariables": {
        "ASPNETCORE_ENVIRONMENT": "Development",
        "MySettings__ASetting": "A settting changed from an environment var"
      }
    }
  }
}

設定


ある日想像して、レガシープロジェクトで働き始めます.しかし、設定ファイルにいくつかの設定値を見つけることができません.同僚を尋ねた後に、それらの構成値は環境変数から読み込まれます.これらの環境変数の値をテストするとき、それらは時代遅れです.arggg!
これらの環境変数をlaunchSettings.json ファイル.新しい開発者は再びそれらの値を見つけるのに苦労する必要はありません.
しかし、環境変数の代わりにオプションパターンを使用するようにコードをリファクタリングできます.物事を明らかにするには、右の値をappsettings.json ファイル.
既存の環境変数はどうですか?設定ファイルに従って既存の環境変数を変更できない場合はthe PostConfigure method . 既存の環境変数を使用して設定ファイルから読み込んだ値を上書きできます.
public void ConfigureServices(IServiceCollection services)
{
    services.Configure<MySettings>(_configuration.GetSection("MySettings"));

    // Other configurations and services...

    services.PostConfigure<MySettings>((options) =>
    {
        var aSettingEnvVar = Environment.GetEnvironmentVariable("A_Setting");
        if (!string.IsNullOrEmpty(aSettingEnvVar))
        {
            options.ASetting = aSettingEnvVar;
        }
    });

    services.AddControllers();
}

結論


ベール!これで、ASPで設定値を読む方法を知っています.ネットコア.他にもあるoptions interfaces : IOptionSnapshot and IOptionsMonitor . また、他の設定プロバイダーを使用して、INIファイル、XMLファイルまたはAzureキーVaultから値を読み取ることができます.
あなたがより多くのASPに興味があるならば.私のポストをチェックしてください.
ハッピーコーディング!