web-dev-qa-db-ja.com

Asp.Net Core 2.0のConfiguration.GetSectionですべての設定を取得

構成情報を取得するさまざまな方法を学習して、今後のプロジェクトの構成をセットアップして使用するための最適なパスを決定できるようにしています。

を使用してさまざまな単一の設定にアクセスできます

var sm = new SmsSettings
    {
        FromPhone = Configuration.GetValue<string>("SmsSettings:FromPhone"),               
        StartMessagePart = Configuration.GetValue<string>("SmsSettings:StartMessagePart"),               
        EndMessagePart = Configuration.GetValue<string>("SmsSettings:EndMessagePart")
    };

また、設定をカウントしたり、特定の設定の値を決定したりできるようにする必要があります。そのため、これらのタイプのことを行う解析メソッドを構築し、GetSectionが行ったことを想定した設定ファイルのセクション全体が必要でした。違う。

appsettingsファイル

{
"ConnectionStrings": {
  "DefaultConnection": "Server=(localdb)\\mssqllocaldb;Database=TestingConfigurationNetCoreTwo;Trusted_Connection=True;MultipleActiveResultSets=true",
  "ProductionConnection": "Server=(localdb)\\mssqllocaldb;Database=TestingConfigurationNetCoreTwo_Production;Trusted_Connection=True;MultipleActiveResultSets=true"
},
"Logging": {
  "IncludeScopes": false,
  "LogLevel": {
    "Default": "Warning"
  }
},   
"SmsSettings": {
  "FromPhone": "9145670987",      
  "StartMessagePart": "Dear user, You have requested info from us on starting",      
  "EndMessagePart": "Thank you."
    }
}

以下は、2つのスクリーンショットです

var section = Configuration.GetSection("ConnectionStrings");

返す

Image 1: variable properties

Image 2: Drilling down into JsonConfigurationProvider

いくつかの質問があります。

  1. これが3つの異なるJsonConfigurationProviderを返すのはなぜですか。そのうちの1つにはappsettings.jsonファイルのすべての設定が含まれます(画像2を参照)
  2. GetSection( "ConnectionStrings")が実際にそれを行っていないのはなぜですか、ConnectionStringsのサブ子を返します
  3. 番号2を指定すると、実際にはConnectionStringsの子をどのように取得するのでしょうか?
  4. 1つのプロパティList Connectionsを持つモデルConnectionStringsを想定して、セクションをオブジェクトに変換できますか?
9
dinotom

この投稿によると

https://github.com/aspnet/Configuration/issues/716

  1. GetSection("Name").Valueはnullを返します。GetChildrenを使用して子アイテムを取得する必要があります
  2. Bindはオブジェクトに対して機能しない場合があります。プロパティがpublicであることを確認してください
  3. Get<T>() over bindを試してください。構成オブジェクトの強く型付けされたインスタンスを提供します

クラスの単純なPOCO(複雑なゲッター/セッター、すべてパブリック、メソッドなし)を試し、そこから取得します

9
dbones

GetSections()Bind()とともに使用すると、使用するpocoオブジェクトを作成できるはずです。

var poco= new PocoClass();
Configuration.GetSection("SmsSettings").Bind(poco);

これにより、すべての値が設定されたpocoオブジェクトが返されます。

7
JStevens

GetSectionによって返されたオブジェクトでBindメソッドを使用すると、セクション内のキーと値のペアが、バインドされているオブジェクトの対応するプロパティにバインドされます。

例えば、

class ConnectionStrings {
  public string DefaultConnection { get; set;}
  public string ProductionConnection {get; set;}
}

..

var connectionStrings = new ConnectionStrings();
var section = Configuration.GetSection("ConnectionStrings").Bind(connectionStrings);
1
Rufus Lobo

「GetSection」と(key、value)を含むセクションが必要な場合は、これを試してください。

Configuration.GetSection("sectionName").GetChildren().ToList()

値を持つキーのコレクションを取得し、LinQで操作できます