web-dev-qa-db-ja.com

Microsoft.Extensions.ConfigurationはASP.NET Coreにどの程度正確に依存していますか?

ASP.NET Coreは、設定値へのIConfigurationアクセスを実装していますか?

おそらく、ASP.NET Coreが何であるかを正確に理解していないため、疑問が生じました。まあ、私はそれがWebフレームワークであることを知っていますが、確かではありませんが、.NETの名前空間、またはパッケージのように見えます... PHPでは、フレームワークはクラスのセット(名前空間)またはコンパイルされたライブラリである可能性があります拡張機能として提供されているため、.NETでも同様のアプローチを想定しています。

最初は、ASP.NET Coreに頭を包むつもりはまだありませんでした。単純なコンソールC#アプリケーション(VS Codeおよび.NET Core)の構成を保存する必要がありました。 JSON(推奨)構成を読み取るためのトピック(たとえば、ここ: コンソールアプリケーションのconfig.jsonから値を読み取る方法 )を見つけました。そのため、3つの必要なナゲットパッケージを追加しました。

_using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.Configuration.FileExtensions;
using Microsoft.Extensions.Configuration.Json;
_

私は使用する必要があります:

_new ConfigurationBuilder()          
    .SetBasePath(Directory.GetCurrentDirectory())
    .AddJsonFile("appsettings.json").Build();
_

これは、IConfigurationRoot/IConfigurationインターフェイスを実装するオブジェクトを返します。ただし、すべての例はASP.NET Coreコンテキストで提供されています。私は本当にシンプルなアプリを持っていますが、ASP.NETの機能はまだ必要ありません。

だから、ASP.NETなしでIConfigurationRootにアクセスしようとしました。結果のオブジェクトは設定ファイルから値を保存しますが、それらにアクセスするためのインターフェースのすべてのメソッドを持っているわけではありません。

これを.NET名前空間のコンテキストで説明する方法は? ASP.NET Coreは、Get<T>()のようなIConfigurationから値にアクセスするメソッドを実装していますか?

_Microsoft.Extensions.Configuration_が_Microsoft.AspNetCore.App_の一部であるか、それに大きく依存している場合、異なる名前空間にあるのはなぜですか?

ASP.NET Core(NuGetパッケージと名前空間)を追加すると、過剰になりますか?

JSONを読み取るためにConfigurationBuilder以外の要素を使用する必要がありますか?

8
Vsevolod

Microsoft.Extensions.ConfigurationMicrosoft.Extensions名前空間の他のパッケージと同様(例 Options 、または DependencyInjection )は、ASP.NET Coreフレームワークの一部として作成されたパッケージです。ただし、ASP.NET Coreおよび関連するすべてのパッケージの構築方法は非常にモジュール式であるため、すべてのライブラリをASP.NET Coreコンテキスト内で使用しても使用しなくても使用できます。

これらのパッケージをライブラリとして理解する必要があります。フレームワークはの上に構築されるため(ASP.NET Coreに含まれています)が、ASP.NET Core Webフレームワークが必要ない場合は、それらのライブラリを個別に使用できますASP.NET Coreの言及なし。それが実際にMicrosoft.ExtensionsではなくMicrosoft.AspNetCore名前空間内に住んでいる理由です:それらは完全に独立したプロジェクトです。もちろん、これらのパッケージの開発はASP.NET Coreチームによって行われ、ASP.NET Coreの設計決定はこれらの拡張パッケージの進化に影響します。しかし、チームはこれらのパッケージに非常に注意しているため、一般的な使用には影響しません。

つまり、これらのパッケージをどのように使用するのでしょうか?他のライブラリと同様に、NuGet参照を追加するだけです。 Microsoft.Extensions.Configurationbaseライブラリであり、ファイルをロードする機能が付属していないため、 Microsoft.Extensions.Configuration.Jsonも必要です。 JSONファイルをロードする場合。

しかし、それは本当に簡単です:

var configuration = new ConfigurationBuilder()
    .AddJsonFile("config.json")
    .Build();

// retrieve configuration values
Console.WriteLine(configuration["foo"]); // bar
Console.WriteLine(configuration["baz:bar"]); // qux

この例では、config.jsonは次のようになりました。

{
    "foo": "bar",
    "baz": {
        "bar": "qux"
    }
}

そのため、このような構成をロードするだけです。ただし、必ず ドキュメント を確認してください。 ASP.NET Coreの内部で使用される構成に関するものかもしれませんが、基礎となる概念はまだ適用されます(例: how構成パスがどのように見えるか 、または バインディングの仕組み )。

最後に、これは実際には設定のみを目的としていることに注意してください。 JSONからデータをロードすることは、Microsoft.Extensions.Configurationでできる多くの設定ソースの1つにすぎません。ただし、使用するプロバイダーに関係なく、セクションとキーパスの概念を持つ同じ構成形式になります。

JSONを解析する方法を見ているときにパッケージにアクセスした場合、間違ったツールを見ている可能性があります。 JSONを解析して適切なデータ構造を取得する場合(JSONを使用してデータをシリアル化する場合に使用する場合など)は、別のものを調べる必要があります。 JSONの解析(シリアル化も)の最も一般的なソリューションは、 Json.NET を使用することです。これは、あらゆる種類のJSONデータを処理する非常に強力で柔軟なツールです。

25
poke