サーチ…


前書き

Asp.netコアは構成の抽象化を提供します。それらを使用すると、さまざまなソースから構成設定をロードし、最終的な構成モデルを構築し、アプリケーションで消費することができます。

構文

  • IConfiguration
  • string this[string key] { get; set; }
  • IEnumerable<IConfigurationSection> GetChildren();
  • IConfigurationSection GetSection(string key);

依存性注入を使用した構成へのアクセス

推奨される方法は、これを避け、 IOptions<TOptions>IServiceCollection.Configure<TOptions>です。

つまり、これはIConfigurationRootアプリケーション全体で利用できるようにするためにはまだかなり簡単です。

Startup.csコンストラクターでは、構成をビルドするための次のコードが必要です。

 Configuration = builder.Build();

ここで、 ConfigurationIConfigurationRootインスタンスでIConfigurationRoot 、このインスタンスをConfigureServicesメソッド、Startup.cs、およびStartup.csのサービスコレクションにシングルトンとして追加します。

 public void ConfigureServices(IServiceCollection services)
 {
    services.AddSingleton<IConfigurationRoot>(provider => Configuration);

たとえば、コントローラ/サービスの設定にアクセスできるようになりました

  public MyController(IConfigurationRoot config){
      var setting1= config.GetValue<string>("Setting1")
  }

入門

この例では、新しいプロジェクトを足場にしたときに何が起こるかを説明します。

まず、次の依存関係がプロジェクトに追加されます(現在のproject.jsonファイル)。

"Microsoft.Extensions.Configuration.EnvironmentVariables": "1.0.0",
"Microsoft.Extensions.Configuration.Json": "1.0.0",

また、 Startup.csファイルに、 ConfigurationBuilder流暢なAPIを使用して構成を構築するコンストラクタも作成します。

  1. まず、新しいConfigurationBuilder作成します。
  2. 次に、追加のファイルの絶対パスを計算するために使用されるベースパスを設定します
  3. オプションのappsettings.jsonを設定ビルダーに追加し、その変更を監視します
  4. これは、 appsettings.environementName.json設定ファイルに関連するオプションの環境を追加します
  5. その後、環境変数を追加します。
public Startup(IHostingEnvironment env)
{
    var builder = new ConfigurationBuilder()
        .SetBasePath(env.ContentRootPath)
        .AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
        .AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true)
        .AddEnvironmentVariables();

    Configuration = builder.Build();
}

複数のソースで同じ設定が設定されている場合、追加された最新のソースが勝ち、その値が選択されます。

これで、indexerプロパティを使用して構成を使用できます。コロン:文字はパス区切り文字を提供します。

Configuration["AzureLogger:ConnectionString"]

これにより、 AzureLoggerセクションのConnectionStringという構成値が検索されます。

環境変数での作業

ConfigurationBuilder .AddEnvironmentVariables()を呼び出すことによって、環境変数から設定を.AddEnvironmentVariables()できます。

これは、接頭辞の環境変数をロードしますAPPSETTING_それはコロンを使用します:キー・パスの区切りとしての。

これは、次のことを意味します。

APPSETTING_Security:Authentication:UserName = a_user_name
APPSETTING_Security:Authentication:Password = a_user_password

このjsonと同等です:

{
    "Security" : {
       "Authentication" : {
           "UserName" : "a_user_name",
           "Password" : "a_user_password" 
        } 
    }
}

** Azure Serviceは環境変数として設定を送信することに注意してください。プレフィックスは透過的に設定されます。だからAzureで同じことをするには、AppSettingsブレードで2つのアプリケーション設定を設定するだけです:

Security:Authentication:UserName         a_user_name
Security:Authentication:Password         a_user_password

オプションのモデルと構成

大規模な構成値セットを扱う場合、1つの購入単価をロードするのは非常に手間がかかるかもしれません。

asp.netに付属するオプションモデルは、 sectionをドットネットpocoにマップする便利な方法を提供します。たとえば、 Microsoft.Extensions.Options.ConfigurationExtensionsパッケージを追加し、 Configure<TOptions>(IConfiguration config)を呼び出すと、構成セクションからStorageOptions直接水StorageOptionsすることができます。 Configure<TOptions>(IConfiguration config)拡張メソッド。

services.Configure<StorageOptions>(Configuration.GetSection("Storage"));

メモリ構成ソース

Dictionary<string,string>などのメモリ内のオブジェクトから構成をソースすることもできます。

.AddInMemoryCollection(new Dictionary<string, string>
{
    ["akey"] = "a value"
})

これは、統合/単体テストのシナリオで役立つことがあります。



Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow