J’écris une application où les fournisseurs tiers peuvent écrire des DLL de plug-in et les déposer dans le répertoire bin de l’application Web. Je souhaite que ces plugins puissent enregistrer leurs propres HttpModules si nécessaire.
Est-ce que je peux append ou supprimer des HttpModules depuis et vers le pipeline à l’exécution sans avoir une entrée correspondante dans Web.Config, ou dois-je modifier Web.Config par programmation lors de l’ajout / suppression de modules? Je sais que l’un ou l’autre va provoquer un redémarrage d’AppDomain, mais je préférerais pouvoir le faire en code plutôt que de devoir manipuler le fichier web.config pour obtenir le même effet.
Cela doit être fait au bon moment dans le cycle de vie HttpApplication, c’est-à-dire lorsque l’object HttpApplication s’initialise (plusieurs fois, une fois pour chaque instance de HttpApplication). La seule méthode qui fonctionne correctement est HttpApplication Init ().
Pour twigr un module via du code, vous pouvez exécuter le code suivant à la place de la définition HttpModule dans web.config:
public class Global : System.Web.HttpApplication { // some modules use explicit interface implementation // by declaring this static member as the IHttpModule interface // we work around that public static IHttpModule Module = new xrnsToashxMappingModule(); public override void Init() { base.Init(); Module.Init(this); } }
Il vous suffit de remplacer la méthode Init () de HttpApplication, puis d’accéder à la méthode Init de l’instance statique. Init () du module connecte l’événement et c’est parti.
Via le blog de Rick Strahl
Réalisez que c’est une vieille question, mais asp.net 4 fournit de nouvelles fonctionnalités qui peuvent aider ici.
En particulier, ASP.NET 4 fournit une fonctionnalité PreApplicationStartMethod
qui peut être utilisée pour append des HttpModules par programmation.
Je viens de publier un article sur ce sujet à l’ adresse http://www.nikhilk.net/Config-Free-HttpModule-Registration.aspx .
L’idée de base est de créer une HttpApplication
dérivée qui permet d’append des HttpModules de manière dynamic au démarrage, puis de les initialiser dans le pipeline chaque fois que chaque instance HttpApplication
est créée dans le domaine d’application.
La DLL Microsoft.Web.Infrastructure.dll a une méthode pour cela dans la classe DynamicModuleUtility. La dll est livrée avec WebPages 1.0
public static class PreApplicationStartCode { private static bool _startWasCalled; public static void Start() { if (_startWasCalled) return; _startWasCalled = true; DynamicModuleUtility.RegisterModule(typeof(EventTriggeringHttpModule)); } }
Dans les nouvelles versions d’ASP MVC, vous pouvez utiliser Package Manager pour append une référence à WebActivatorX, puis faire quelque chose comme ça
using WhateverNameSpacesYouNeed; [assembly: WebActivatorEx.PreApplicationStartMethod(typeof(YourApp.SomeNameSpace.YourClass), "Initialize")] namespace YourApp.SomeNameSpace { public static void Initialize() { DynamicModuleUtility.RegisterModule( ... the type that implements IHttpModule ... ); } }