1

この質問の名前はこれこれに似ていますが、そうではありません。

私は現在、ユーザーの要望に応じてカスタム構成が必要なライブラリを開発しています。

カスタム構成セクションを作成しましたが、すべて正常に動作します。

ただし、デバッグ中に、構成セクションのコンストラクターが 2 回呼び出されていることに気付きました。そして、それは私が意図したものではありません。

さらに掘り下げてみると、ライブラリから構成情報にアクセスするために、次の方法を使用するために発生したことがわかりました。

var config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
var section = config.GetSection("myConfigSection");

MyConfigSectionこれより前に、.NET Framework は、ライブラリを実行するアプリケーションの構成環境を初期化し、クラスのコンストラクターを呼び出していました。

私の質問は、既に読み込まれた情報にアクセスする方法ですか?

クラスのコンストラクターが 2 回呼び出される理由

上記のコードのように、すべてを再度リロードしたくないためです。


編集して追加

上記のコードを次のように変更しても、コンストラクターは 2 回呼び出されます。

var section = ConfigurationManager.GetSection("myConfigSection");

明確にするために編集

この質問は へMyConfigSectionのアクセスに関するものではありません。問題なくアクセスできます。

問題は、クラスのコンストラクターが 2 回呼び出される理由です。


もう少し明確にする

クラスのコンストラクターが 2 回呼び出されている場合は、読み込みプロセスが 2 回発生しています。

そして、私は単にこれが起こることを望んでいません。バカバカしい。

Configurationmanagerはい、この質問の最初の編集に従って、の静的メソッドを呼び出しています。

4

3 に答える 3

0

構成が親アプリケーションによって既に読み込まれている場合は、静的なGetSection をブロックからすぐに使用できるはずです。

ConfigurationManager.GetSection('myConfigSection');

それがあなたが望んでいたものではない場合は、状況をよりよく説明できるかもしれません。AppSettings にも興味があるかもしれません - http://msdn.microsoft.com/en-us/library/system.configuration.configurationmanager.appsettings.aspx

于 2010-01-20T04:43:20.950 に答える
0

あなたは 2 つの質問をしました: ctor が 2 回呼び出されるのはなぜですか? 既に読み込まれている構成にどのようにアクセスしますか?

2回呼び出される理由はすでに指摘しました。構成システムは、アプリのロード時に構成ファイルを解析しています。とConfigurationManagerを含む の静的メンバーを介してその構成を利用できるようにします。ConfigurationManager.AppSettingConfigurationManager.GetSection()

これらの静的メンバーを使用して、既に読み込まれている構成にアクセスします。

于 2010-01-20T05:34:50.937 に答える
0

さらに調査した結果、次の状況により、コンストラクターが 2 回呼び出されています。

  1. .NET Framework は<section name="..." type="..." /><configSections>要素内で を見つけると、クラスを作成します。
  2. app.configまたは.NET Frameworkでセクションが構成されているweb.config場合、指定されたクラスの別のインスタンスを作成してセクションをデコードし、既に作成されているインスタンスとマージします。

ドキュメントに従って動作しますがConfigurationSection、開発者がアプリケーションの存続期間中に作成されるオブジェクトは 1 つだけであると考えている場合、この動作は の実装と衝突する可能性があります。

したがって、この一連の考え方に従って、構成がたとえば で指定されている場合、machine.configオブジェクトはすべてをマージするために 3 回構築されます。app.configuser.config

于 2010-01-20T14:36:22.880 に答える