web-dev-qa-db-fra.com

Fonctions magiques de Global.asax

Lors de la création d'un projet Mvc ASP.NET dans Visual Studio, un Global.asax & Global.asax.cs Sera créé. Dans ce fichier .cs, vous trouverez la méthode standard Application_Start.

Ma question est la suivante, comment s'appelle cette fonction? car ce n'est pas une dérogation. Donc, je suppose que ce nom de méthode est par convention. Il en va de même pour la méthode Application_Error.

Je veux savoir où ces méthodes sont accrochées. Parce que j'écris ces méthodes (sans les remplacer), je n'ai trouvé aucune documentation à leur sujet dans MSDN. (J'ai trouvé la page this mais elle vous indique uniquement de vous accrocher à l'événement Error et affiche une Application_Error(object sender, EventArgs e) mais pas la façon dont l'événement et la méthode sont liés.)

//Magicly called at startup
protected void Application_Start() 
{
    //Omitted
}

//Magicly linked with the Error event
protected void Application_Error(object sender, EventArgs e)
{
    //Omitted
}
27
SynerCoder

Ce n'est pas vraiment magique. Le pipeline ASP.NET relie tout cela.

Vous pouvez voir la documentation à ce sujet ici .

Plus précisément, vous serez intéressé par les parties ci-dessous:

Un objet HttpApplication est affecté à la demande.

Qui consiste en une liste des événements qui sont déclenchés et dans quel ordre.

Il y a des liens partout sur cette page (trop nombreux pour être contenus ici) qui renvoient vers diverses autres pages avec encore plus d'informations.


ASP.NET lie automatiquement les événements d'application aux gestionnaires du fichier Global.asax à l'aide de la convention de dénomination Application_event, telle que Application_BeginRequest. Cela est similaire à la façon dont les méthodes de page ASP.NET sont automatiquement liées aux événements, tels que l'événement Page_Load De la page.

Source : http://msdn.Microsoft.com/en-us/library/ms178473.aspx

15
Simon Whitehead

Pour démystifier la "magie" de la réponse acceptée, le pipeline ASP.Net lie automatiquement les événements HttpApplication aux méthodes avec le Application_EventName Dans la classe. Si (un peu comme moi) vous préférez voir les événements explicitement liés à un gestionnaire, ceux-ci peuvent être liés en remplaçant HttpApplication.Init() et Visual Studio générera la méthode du gestionnaire avec la signature correcte.

public override void Init()
{
  this.BeginRequest += MvcAppliction_BeginRequest;
}

private void MvcApplication_BeginRequest(object sender, EventArgs e)
{
  ...
}

Il y a un exemple de cette méthode de liaison d'événements

2
Scott Rickman

ASP.Net lui-même le crée. Voici le flux selon MSDN -

  • L'utilisateur demande une ressource d'application au serveur Web.
  • ASP.NET reçoit la première demande pour l'application.
  • Des objets principaux ASP.NET sont créés pour chaque demande.
  • Un objet HttpApplication est affecté à la demande. Dans cette étape, Global.asax sera traité et les événements seront automatiquement associés.
  • La demande est traitée par le pipeline HttpApplication. Dans cette étape, les événements HttpApplication Global sont déclenchés.

Voici la référence - Cycle de vie de l'application ASP.Net.

D'après la référence, ASP.NET lie automatiquement les événements d'application aux gestionnaires du fichier Global.asax à l'aide de la convention de dénomination Application_event, telle que Application_BeginRequest.

1
ramiramilu