2017-09-05 15 views
0

.NET標準にはConfigurationManagerが存在しないため、.NET標準クラスライブラリ内のweb.configまたはappSettings.{env}.jsonであれ、実行アセンブリのアプリケーション設定を取得する最も良い方法は何ですか?.NET Framework、.NET Standard、および.NET Coreプロジェクト間で同じ構成を使用する方法は?

は、我々は3つのプロジェクトがあります。

  • ASP.NETコアWebアプリケーションを(1.1)
  • ASP.NET Webアプリケーション(4.6.1)
  • .NET標準クラスライブラリ(1.4) - >両方のプロジェクトによって参照される

.NET Standardクラスのlibでは、配備先の環境に基づいて変更する必要があるURLがあります。

これは.NETコアアプリケーションで問題ありません。適切なappSettings.{env}.jsonファイルにURLを追加し、適切な値をDIコンテナに追加してからMicrosoft.Extensions.Optionsライブラリを使用して設定を取得します。

でも、私たちは.NET Framework 4.6.1アプリケーションからライブラリを呼び出す必要がありますが、web.configファイルから値を取得する方法はありません(少なくとも私が見つけることはできません)クラスライブラリ内のURLを設定する良い方法があります。

URL変数を静的に設定し、それを参照する各.NET FrameworkプロジェクトのApplication_Start()メソッド内から値を設定することで、追加したappSettingキーを使用して環境を判断しています各web.configに追加し、環境に基づいて手動でURLを設定します。

.NET標準クラスライブラリ内の.NET Coreおよび.NET Frameworkアプリケーションの両方からappSettings値を取得する処理が、より堅牢な方法はありますか? 好ましくは、クラスライブラリ内で値を設定することができます。

+0

完全に合法的な質問に対して無作為に投票してくれてありがとう? –

答えて

2

あなたのライブラリを呼び出す前に設定から値を読んで、パラメータでメソッドまたはコンストラクタに渡す必要があります。

一般に、ライブラリコードは、ホスト環境の設定による副作用に依存してはいけません。そうすることで、コードの再利用や効果的なテストが非常に難しくなります。

+0

これはすでに行っています.Global.asax.csでは、それを使用する各.NET Frameworkプロジェクトの設定に基づいて、 'SetClientUrl(string clientApiUrl)'メソッドを呼び出します。よりスケーラブルな方法があると私は期待していました。私たちのライブラリはSwagger APIに基づいて生成され、実際に選択する必要がないように、展開先のサーバーによって異なるIPアドレスが必要です。すべてのプロジェクトが.NET Coreであるか、すべてのプロジェクトが.NET Frameworkであった場合、これは完全に可能なので、.NET標準でこれを実現する方法があると想定しました。 –

+1

あなたは正しいことをしているように思えますが、使い方を強制する方法があるかどうかは考えています。たとえば、コンストラクタパラメータを使用します。具体的なことなしに言うのは難しい。 (私のdownvote btwではなかった、これは良い質問だと思う。) –

+0

私はそれがあなたではないと思った。一般的に、投票を下す人は、質問にも答える時間がかかりません:)それで、 'web.config'と' appSettingsの両方からappSettingsを取得することは現在可能ではないようです。 json'を.NET標準プロジェクトで使用しています。お返事をありがとうございます。 –