アプリケーションの開始時に追加されたアプリティングの取得の問題

StackOverflow https://stackoverflow.com/questions/1582198

質問

私は、私のglobal.asaxでapplication_start()に、データベースに出て、すべてのアプリ設定を名前/値テーブルから取得してから、それらをにドロップするという奇妙な問題があるように見えます。介してアプリケーション 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のように私のアプリケーションFacadeクラスに同様のプロパティを構築します(<%= ApplicationFacade.Putz %>)私は得ます」mash' 戻ってきた。

だから、私は自分のアプリケーションが正しく機能していることを知っています。それで、それはapplication_start()の私のコードかもしれませんか?

まあ、私がこれを私の見解に置いたら <%=Application["WebServiceUsername"]%>, myUsername 返されます。

何が与えるの?!

答え

ConfigurationManager.AppSettings.Set(appConfig.ConfigName,appConfig.ConfigValue);
役に立ちましたか?

解決

Application_Start あなたが参照するとき Application オブジェクトこれは実際にのインスタンスです httpapplicationState これは、アプリケーション固有の設定をメモリに保持するために使用され、web.configに保存されているキー/バリューappsettingsとは何の関係もありません。

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

どちらも完全に無関係であり、で保存されている値を読むことを期待することはできません Application["someKey"]WebConfigurationManager.AppSettings["someKey"].

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top