48 votes

Enregistrer par programme HttpModules à l'exécution

Je suis en train d'écrire une application où la 3ème fournisseurs tiers peuvent écrire plugin Dll et déposez-les dans l'application web du répertoire bin. Je veux avoir la possibilité pour ces plug-ins pour être en mesure d'enregistrer leur propre HttpModules si nécessaire.

Est-il de toute façon que je peux ajouter ou supprimer des HttpModules de et à la conduite au moment de l'exécution sans avoir une entrée correspondante dans le Web.Config, ou dois-je modifier par programmation le Web.Config lors de l'ajout / suppression de modules? Je sais que de toute façon va provoquer un AppDomain redémarrer, mais je préfère être en mesure de le faire dans le code que d'avoir à fudge le web.config pour obtenir le même effet.

54voto

Aaron Fischer Points 8919

Il doit être fait au plus juste temps dans le HttpApplication cycle de vie ce qui est quand la HttpApplication objet initialise (plusieurs fois, une fois pour chaque instance de HttpApplication). La seule méthode où cela fonctionne correcte est HttpApplication Init().

Pour le raccordement d'un module via le code, vous pouvez exécutez le code suivant à la place de le HttpModule définition 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);
     }
  }

Tout ce que vous faire est de remplacer le HttpApplication méthode Init() et alors accéder à l'instance statique de l'Init la méthode. Init() du module se raccorde l'événement et vous partez.

Par Rick Strahl blog

29voto

nikhilk Points 3770

Réalisez que c'est une vieille question, mais asp.net 4 fournit quelques nouvelles capablities qui peut aider à ici.

Plus précisément, ASP.NET 4 fournit un PreApplicationStartMethod capacité qui peut être utilisé pour ajouter HttpModules par programmation.

Je viens de faire un post de blog à http://www.nikhilk.net/Config-Free-HttpModule-Registration.aspx.

L'idée de base est de créer un dérivé HttpApplication qui permet d'ajouter HttpModules dynamiquement au moment du démarrage, et il initialise ensuite dans le pipeline chaque fois que chaque HttpApplication instance est créée au sein de l'application-domaine.

13voto

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));
    }
}
 

0voto

Mitchel Sellers Points 38352

Autant que je sache, vous ne pouvez le faire que via le web.config. Cependant, il est assez facile d’utiliser XML pour éditer le code web.config.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X