Monday 5 May 2014

Comprendre le chargement dynamique de modules sous ASP.NET 4.5 en 5 minutes [HttpApplication.RegisterModule, PreApplicationStartMethod] - Dynamically load modules in ASP.NET 4.5

Les mots clés de ce post sont :
- HttpApplication :
- HttpModule : toute classe qui implémente l'interface IHttpModule. Un module est un programme qui s'execute durant le traitement d'une requête par IIS.
- HttpApplication.RegisterModule : méthode disponible sur .NET 4.5, permettant de charger un module.
- PreApplicationStartMethod
1- Commencez par créer un projet web (Webform ou MVC) sous le framework 4.5.
 Ci-dessous mon projet, encadrés en bleu les fichiers que je vais modifier.
2- Le fichier DevenvaModule.cs est mon module personnalisé. Il va ajouter une entête particulière à toutes les réponses aux requêtes http.
Ci-dessous le code complet


3- La classe ModulesLoader est la classe qui va s'occuper de l'enregistrement des modules via la méthode statique HttpApplication.RegisterModule


4- La dernière étape consiste à utiliser l'attribut PreApplicationStartMethod, cet attribut s'applique à un assembly et permet l'enregistrement du module en toute transparence.
Dans le fichier AssemblyInfo.cs, ajouter en dernière ligne :



Cette déclaration permettra de connaitre le type et le nom de la méthode de la classe cible qui va permettre le chargement dynamique du module.

Après ces modifications, testez une page de l'application. Le module est bien entré dans le traitement de la requête :




Conclusion :
Nous avons vu dans ce post une technique :
 - souple : nous pouvons choisir dynamiquement les modules à charger (cf. méthode LoadModules)
 - transparente : l'enregistrement du module ne nécessite pas de toucher ni au global.asax, ni au web.config du site , ni au fichier de configuration du serveur.

Domaine d'application :
module sur une solution multi-tenant.