QA@IT

ASP.NET MVCでの共通変数について

10445 PV

アプリケーション起動時に、アプリケーション全体で共通に使用できる
変数を作りたいのですがどうすればよいでしょうか?

アプリケーション起動時にセットした値を、各セッションに関係なく、
コントローラ側で共通に使いたいとおもっています。

宜しくお願いします。

  • 目的は何ですか? 局所的なことを質問するのではなく、全体のシナリオを含めてやりたいことを書いていただけると、より的を得た回等がもらえるかも知れませんよ。 -
  • 言葉足らずですみません。目的は、ある情報をファイルで保持しており、そのファイルの中の情報をコントローラで読み込んで、ある処理をしようと思っています。ただ、ファイルの中の情報は、どのコントローラでよんでも同じなので、
    アプリケーション起動時に読み込んで、メモリに格納しておいたほうが、
    パフォーマンスがよいと考えたのですが、どのように行えばよいかわからず、質問させていただいた次第です。
    -

回答

以下の 2 つの方法が考えられます。ただし、「ファイルの中の情報」がどういうものか分からないので、適切かどうかは分かりません。

(1) web.config の appSettings 要素に設定し、コントローラーでは WebConfigurationManager.AppSettings プロパティで取得する。

appSettings の add 要素 (全般設定スキーマ)
http://msdn.microsoft.com/ja-jp/library/vstudio/ms228312(v=vs.100).aspx

WebConfigurationManager.AppSettings プロパティ
http://msdn.microsoft.com/ja-jp/library/system.web.configuration.webconfigurationmanager.appsettings(v=vs.100).aspx

(2) アプリケーション状態を利用する(MVC アプリも ASP.NET ランタイム上で動くので、Web Forms アプリと同様にアプリケーション状態を利用できます)。コントローラーからは HttpContext.Application プロパティを使ってアクセスする。

ASP.NET のアプリケーション状態の概要
http://msdn.microsoft.com/ja-jp/library/ms178594.aspx

HttpContext.Application プロパティ
http://msdn.microsoft.com/ja-jp/library/system.web.httpcontext.application(v=vs.100).aspx

上記 (2) の方法は、ワーカープロセスのリサイクルによるデータの消失に注意してください。Global.asax の Application_Start メソッドで初期値を設定するというような配慮が必要でしょう。

また、いずれの方法も、単体テストの際に困ることになるかもしれませんので、そのあたりにも注意してください。

編集 履歴 (0)
  • 返事が遅れてすみません!
    ご教授いただきましたHttpContext.ApplicationをApplication_Start メソッドでセットすることで
    解決しました!
    ファイルの中の情報とは、SQLのクエリ文になります。
    長いクエリ文なので、web.config は厳しいと思っていたのですが、他の方法があって助かりました。
    ありがとうございます!

    -
  • ストアドにするという手は使えなかったのでしょうか? -
ウォッチ

この質問への回答やコメントをメールでお知らせします。