2017-08-24 22 views
1

JSONファイルから設定を読み込むときに、設定に異なるプロパティ名を使用したいと思います。ASP.NETコアでオプションのJSONプロパティ名をカスタマイズする

public class MinioConfiguration 
{ 
    [DataMember(Name = "MINIO_ENDPOINT")] 
    public string Endpoint { get; set; } 
    [DataMember(Name = "MINIO_ACCESS_KEY")] 
    public string AccessKey { get; set; } 
    [DataMember(Name = "MINIO_SECRET_KEY")] 
    public string SecretKey { get; set; } 
} 

どちらDataMemberJsonProperty作品。それを達成する可能性はありますか?

答えて

2

これは残念ながら不可能です。責任あるコンポーネントは、JSON構成プロバイダ(Microsoft.Extensions.Configuration.Json)と構成バインダ(Microsoft.Extensions.Configuration.Binder)です。前者はJSONファイルをIConfigurationに読み込みますが、後者はIConfigurationを型にマップします。

しかし、構成バインダーはソースに依存しないため、JSON、インメモリー構成、環境変数のいずれの構成であっても、どこから構成されているかは問題ありません。バインダーは、設計上、ターゲットタイプのソース固有の属性を検索できません。

一方、構成がどの型にもバインドされているとは限らないため、構成プロバイダーは型にバインドするかどうかにかかわらず、一貫して作業する必要があります。したがって、JSONプロバイダはJSONプロパティを設定キーにマッピングするための独自の規則に従います。

両方のコンポーネントが独立して実行されるため、IConfigurationオブジェクトで明示的に実行されているバインダーなので、実際の構成解析プロセスよりもはるかに遅れて実行されます。したがって、JSON構成プロバイダが情報にアクセスすることは不可能です。バインダは後でターゲットタイプを取得します。そのため、設定名を変更することはできません。

しかし、私はこれはとにかくやるべきことではないと主張します。設定は非常にアプリケーション固有のものですが、アプリケーションが必ずしも所有していない設定ファイルを使用するような別のキーを使用する場合は、私はこのアプローチを推奨し、むしろアプリケーション固有の設定ファイルを使用します。

この構成ファイルを再利用する必要がある場合は、その特定の種類の構成プロバイダをいつでも作成できます。コンフィギュレーションプロバイダーを書くことはそれほど難しくありません。とにかくそれを非常に特定のフォーマットに制限しようとする場合は特にそうです。

+0

私が設定ファイルについて話しているなら、私はあなたの主張に同意します。しかし、私は環境変数 - Docker ENV変数から構成変数を使用しています。これらはコンテナの起動時に設定されます。この場合、いくつかの設定ファイルをマップするのは意味がありません。環境変数は、例えば、 'S3_ENDPOINT'、' S3_ACCESS_KEY'、 'SQL_ENDPOINT'です。アプリケーションでは、それは異なるビットで定義されます。 'S3Configuration {Endpoint {get; set; }とSqlConfiguration {Endpoint {get;セット;}} '。このきれいな分離を達成するためには、それが望ましい。 –

+0

@OndrejTomcikええ、どこから来ているのか分かりますが、ビルトインの設定プロバイダは単にこれらの機能を提供していません。標準環境プロバイダーでさえ、[Azureのハードコーディング処理](https://github.com/aspnet/Configuration/blob/rel/2.0.0/src/Microsoft.Extensions.Configuration.EnvironmentVariables/EnvironmentVariablesConfigurationProvider.cs#L70)がいくつかの特定のマッピングを実行する。 - あなたはおそらくあなた自身のプロバイダをここでロールバックする必要があります。プロバイダーとバインダーはまだ別々であるため、プロバイダーはプロパティではなく設定キーにマッピングされることに留意してください。 – poke

関連する問題