2010-11-18 22 views
0

マスターコントローラを使用してサイトを作成しようとしています。静的およびパラメータなしの2つのコンストラクタがあります。仕様では静的なものは最初に呼び出され、クラスの静的なメンバーを初期化するために1度呼び出されるべきですが、それは決してありませんでした。コントローラからアクセス可能なスタッフのために単一のストレージを実装するにはどうすればよいですか?Asp.Net Mvcコントローラの静的コンストラクタ

編集: 私はそれをデバッグしようとするといくつかの間違いを犯すと思いますが、今日は期待通りに動作し、静的なコンストラクタは通常のものと一度呼び出されます。

答えて

1

ASP.NET MVCのコントローラ用の静的コンストラクタを使用するのはあまり一般的ではありません。正確に何を達成しようとしているのか分かりませんが、global.asax Application_Startはアプリケーションの初期化を行うのに適しているようです。また、コントローラーがアクセスできる単一のストレージが何を意味していますか?セッションとは異なり、アプリケーション全体の格納に使用されるHttpContext.CacheまたはHttpContext.Applicationオブジェクトを使用できませんか?また、スレッドセーフであるという利点もあり、それらのストレージへのアクセスを同期させる必要はありません。

静的コントローラのコンストラクタに関しては、デフォルトのコンストラクタの前に呼び出され、アプリケーションごとに1回しか呼び出されず、CLRによって保証される必要があります。このためには、正確に次のシグネチャ(プライベート、ノーリターンタイプ、含む型と同じ名前)を持つ必要があります:私は一度初期化するいくつかの情報構造を持つようにしたい

public class HomeController: Controller 
{ 
    // This is the exact signature of a static constructor 
    static HomeController() 
    { 

    } 
} 
+0

1.(constのようなものが、ではない正確に)。これらの構造体を毎回初期化したくない。私は読み込み操作しかしないので、同期は必要ありません。私はキャッシュとアプリケーションを使用できることを知っていますが、そうしたやり方で、すべてのコントローラにこれらの構造体を可視化したいと思います。私は自分の道が正しいと言っているわけではないので、誰かが私の状況に対してより良い解決策を提供できるなら、どうかしてください。 – devfreak

+0

2.私の静的コンストラクタシグネチャは、あなたが書いたものとまったく同じです。私はそれをデバッグしようとしており、2つのブレークポイントを静的および通常のコンストラクタに配置しようとしています。通常のコンストラクタは、静的なコンストラクタの前に呼び出されます。なぜどんなアイデア? – devfreak

関連する問題