2

強く型付けされたクラスを使用してappsettings.jsonファイル(およびその他の設定ファイル)にアクセスしたいと思います。 .NET Core 1(例えば、https://weblog.west-wind.com/posts/2016/may/23/strongly-typed-configuration-settings-in-aspnet-core)ではそうしたことについて多くの情報がありますが、.NET Core 2の隣には何もありません。.NETコア2コンソールアプリケーションでの厳密な型指定設定

さらに、私はASPではなくコンソールアプリケーションを構築しています。ネット。

.NETコア2では構成APIが完全に変更されているようです。私はそれを解決できません。誰でも?

編集:おそらくコア2の文書がまだ追いついていないと思います。例:https://docs.microsoft.com/en-us/dotnet/api/microsoft.extensions.configuration.configurationbinder?view=aspnetcore-2.0は、.NET Framework 2にはConfigurationBinderが存在するが、Microsoft.Extensions.ConfigurationおよびMicrosoft.Extensions.Optionsのオブジェクトブラウザでは何も表示されないと考えられます。

は私が

  • インストール・パッケージMicrosoft.Extensions.Options -Version 2.0.0
  • インストール・パッケージMicrosoft.Extensions.Configuration -Version 2.0.0
にNuGetコンソールを使用していました
+1

'ConfigurationBinder'は' Microsoft.Extensions.Configuration.Binder' NuGetパッケージに..です –

答えて

3

解決策に至ったMartin Ullrich氏に感謝します。ここで遊んでいくつかの事がありました:

  • 古いスタイル「参照が」(.NETのコアに新しい「依存関係」に対立するものとして)すべてのこと
  • を隠したので、私はDLLレベルの参照とさびたです私は、NuGet Microsoft.Extensions.Configurationパッケージをインストールすると、子名前空間DLLがインストールされると想定していました。実際には、NuGetギャラリーには多くのパッケージがあります(here参照)。 NuGetコンソールには、具体的にどのDLLが表示されているのかはわかりませんが、インストールされるとソリューションブラウザで表示されます。 enter image description here
    API BrowserのConfigurationBinderを検索すると何も得られません。これは拡張ライブラリの一部であるためです。
  • Rick Strahlは質問にリンクした彼のポストで言及しましたが、私はまだそれを逃しました.Bindメソッドは、たとえば、ConfigurationBinderの静的メソッドのように見えます。しかし、実際には拡張メソッドです。したがって、NuGetパッケージがインストールされると、魔法のように表示されます。これは、私がかなり努力していないドキュメントに大きく依存しています。

ので、要約では、ソリューションでしたへ:

  • インストール・パッケージMicrosoft.Extensions.Configuration.Binder -Version 2.0.0
  • インストール・パッケージMicrosoft.Extensions.Configuration.Json -version 2.0.0

.SetBasePath.AddJsonFile方法.Bind方法を与える第一、及び第二の。

最終的なコードを1日に1回追加して完成させていただきます。

EDIT:

public class TargetPhoneSetting { 
    public string Name { get; set; } = ""; 
    public string PhoneNumber { get; set; } = ""; 
} 

public class AppSettings { 
    public List<TargetPhoneSetting> TargetPhones { get; set; } = new List<TargetPhoneSetting>(); 
    public string SourcePhoneNum { get; set; } = ""; 
} 

public static AppSettings GetConfig() { 
    string environment = Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT"); 

    var builder = new ConfigurationBuilder() 
     .SetBasePath(System.IO.Directory.GetCurrentDirectory()) 
     .AddYamlFile("appsettings.yml", optional: false) 
     ; 
    IConfigurationRoot configuration = builder.Build(); 

    var settings = new AppSettings(); 
    configuration.Bind(settings); 

    return settings; 
} 
関連する問題