0

Application_Start() の global.asax で、データベースに送信され、名前/値テーブルからすべてのアプリ設定を取得し、それらを経由でお申し込みApplication.Add(name,value)ください。

別のプロジェクトに「アプリケーション ファサード」があり、サービス レイヤー、データ レイヤーなどで使用され、さまざまなビットとピースを実行する必要がある設定を取得します。

私のデータベースには、いくつかのエントリがあります。

ConfigName          |  ConfigValue
WebServiceUsername  |  myUsername
WebServicePassword  |  myPassword

したがって、私の方法では、データベースからこれらの値を取得して、アプリケーションに入れます。

protected void GetApplicationSettings()
{
  //Get all the config values out of the database, and then put them into the application keys...
  var appConfigAttributes = ApplicationConfigurationService.GetAppConfigNames();

  foreach (var appConfig in appConfigAttributes)
  {
    Application.Add(appConfig.ConfigName,appConfig.ConfigValue);
  }
}

これは、後でアプリケーションから値を呼び出す方法です。

public static string WebServiceUsername
{
  get { return WebConfigurationManager.AppSettings["WebServiceUsername"]; }
}

これは物事が奇妙になるところです。

これを使用して Web レイヤーからアプリケーション ファサードを呼び出すと、次のようになります。

<%= ApplicationFacade.WebServiceUsername %>

何も返されません (はい、get メソッドで ConfigurationManager だけを試しました!)。

しかし、これは奇妙なことです...

アプリケーション キーを web.config ファイルに手動で入力すると...

<appSettings>
  <add key="putz" value="mash"/>
</appSettings>

次に、Putz と同様のプロパティを ApplicationFacade クラスに組み込みます。ビュー ( <%= ApplicationFacade.Putz %>) で呼び出しを行うと、' mash' が返されます。

したがって、ApplicationFacade が正しく機能していることはわかっています。おそらくそれはapplication_start()の私のコードですか?

さて、これを私の見解に入れると<%=Application["WebServiceUsername"]%>myUsernameが返されます。

何が得られる?!

答え

ConfigurationManager.AppSettings.Set(appConfig.ConfigName,appConfig.ConfigValue);
4

1 に答える 1

3

Application_Startオブジェクトを参照する場合、これApplicationは実際にはアプリケーション固有の設定をメモリに保持するために使用されるHttpApplicationStateのインスタンスであり、web.config に格納されているキー/値の appSettings とは関係ありません。

  • これを使用すると、web.configのセクションにWebConfigurationManager.AppSettings["someKey"]対応する値が返されます。someKeyappSettings
  • これを使用するApplication["someKey"]と、アプリケーション インスタンスにキャッシュされた値が返されます。

Application["someKey"]どちらもまったく関係がなく、 with に格納された値を読み取ることは期待できませんWebConfigurationManager.AppSettings["someKey"]

于 2009-10-17T13:32:46.527 に答える