2010-11-18 3 views
0

Je suis en train de créer un site, avec un controller.It maître a deux constructeurs - statiques et parameterless. Par spécification, le statique devrait être appelé en premier et une fois, pour initialiser les membres statiques de la classe, mais cela n'a jamais été le cas, pourquoi? Comment puis-je implémenter un stockage unique pour certains membres du personnel qui devrait être accessible depuis le contrôleur?contrôleur Asp.Net Mvc constructeur statique

EDIT: Je suppose que je fais une erreur quand j'essaie de le déboguer parce que, aujourd'hui cela fonctionne comme prévu, le constructeur statique est appelé une fois et avant régulière.

Répondre

1

Il est pas très courant d'utiliser des constructeurs statiques pour les contrôleurs dans ASP.NET MVC. Je ne sais pas exactement ce que vous essayez d'atteindre mais global.asax Application_Start semble être un meilleur endroit pour effectuer des initialisations d'applications. Qu'entendez-vous également par un stockage unique accessible par le contrôleur? Vous ne pouvez pas utiliser le HttpContext.Cache ou l'objet HttpContext.Application qui sont utilisés pour stocker des choses à l'échelle de l'application (contrairement à la session)? Ils ont également l'avantage d'être thread-safe de sorte que vous n'avez pas besoin de synchroniser l'accès à ces stockages.

En ce qui concerne le constructeur du contrôleur statique est concerné, il doit être appelé avant que le constructeur par défaut et une seule fois par application et qui est garanti par le CLR. Pour cela, il doit avoir exactement la signature suivante (privée, aucun type de retour, même nom que le type contenant):

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

    } 
} 
+0

1. Je veux avoir des structures d'information qui à initialiser une fois (quelque chose comme const, mais pas exactement). Vous ne voulez pas que ces structures soient initialisées à chaque fois. Comme je n'aurai que l'opération de lecture, je n'ai pas besoin de synchronisation. Je sais que je peux utiliser Cache et Application, mais de cette façon je donnerai de la visibilité à tous mes contrôleurs à ces structures et je ne veux pas, puisque je les utiliserai dans un seul. Je ne dis pas que ma voie est la bonne, donc si quelqu'un peut offrir une meilleure solution à ma situation, s'il vous plaît faire. – devfreak

+0

2. Ma signature de constructeur statique est exactement celle que vous avez écrite. J'essaye de le déboguer et de mettre 2 points de rupture dans le constructeur statique et normal. Le constructeur normal est appelé avant statique. Des idées pourquoi? – devfreak

Questions connexes