アプリケーションの開始時に追加されたアプリティングの取得の問題
-
21-09-2019 - |
質問
私は、私の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"]
.