サーチ…
前書き
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();
ここで、 Configuration
はIConfigurationRoot
インスタンスで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を使用して構成を構築するコンストラクタも作成します。
- まず、新しい
ConfigurationBuilder
作成します。 - 次に、追加のファイルの絶対パスを計算するために使用されるベースパスを設定します
- オプションの
appsettings.json
を設定ビルダーに追加し、その変更を監視します - これは、
appsettings.environementName.json
設定ファイルに関連するオプションの環境を追加します - その後、環境変数を追加します。
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"
})
これは、統合/単体テストのシナリオで役立つことがあります。