J'écris une application où les fournisseurs tiers peuvent écrire des plug-ins DLL et les déposer dans le répertoire bin de l'application web. Je veux que la capacité de ces plugins soit capable d'enregistrer leurs propres HttpModules si nécessaire. Y at-il un moyen pour ajouter ou supprimer des modules HttpModules depuis et vers le pipeline au moment de l'exécution sans avoir d'entrée correspondante dans Web.Config ou dois-je modifier par programme le fichier Web.Config lors de l'ajout/suppression de modules? Je sais que l'une ou l'autre façon va provoquer un redémarrage de AppDomain mais je préfère être capable de le faire dans le code plutôt que de devoir fudge le web.config pour obtenir le même effet.Enregistrer par programme HttpModules à l'exécution
Répondre
Il doit être fait à tout moment en plein cycle de vie HttpApplication qui est lorsque l'objet HttpApplication (Initialise plusieurs fois, une fois pour chaque instance de HttpApplication). La seule méthode où cela fonctionne est HttpApplication Init().
raccorder un module via le code, vous pouvez exécuter du code comme le suivant au lieu 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); } }
Tout ce que vous faites est passer outre la méthode Init() du HttpApplication et puis accédez à la méthode Init de l'instance statique. Init() du module connecte l'événement et c'est parti.
réalise que c'est une question ancienne, mais asp.net 4 fournit quelques nouvelles capablities qui peuvent aider ici. En particulier, ASP.NET 4 fournit une fonctionnalité PreApplicationStartMethod qui peut être utilisée pour ajouter des modules HttpModules par programme.
Je viens de publier un article sur ce sujet au 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'ajouter des HttpModules dynamiquement au démarrage, puis de les initialiser dans le pipeline chaque fois qu'une instance HttpApplication est créée dans le domaine de l'application.
Blog mort ... lien de retour: http://wayback.archive.org/web/20120719043729/http://www.nikhilk.net/Config-Free-HttpModule-Registration.aspx – felickz
Le DLL Microsoft.Web.Infrastructure.dll a une méthode pour cela dans la classe DynamicModuleUtility. Le dll est livré 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 de ASP MVC, vous pouvez utiliser Package Manager pour ajouter 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 ...);
}
}
- 1. HttpModules
- 2. C# ASP.NET HttpModules: HttpApplication Events
- 3. asp.net supprimer httpmodules inutilisés
- 4. Équivalent de HttpModules ASP.NET en PHP
- 5. Comment enregistrer une extension à une application personnalisée particulière par programme?
- 6. Interaction entre httpmodules et httphandlers
- 7. Eclipse: Sur Enregistrer exécuter un programme
- 8. Créer une photomosaic par programme
- 9. Accès par programme à l'historique du navigateur
- 10. ajouter par programme css class à ListItem
- 11. Comment se connecter à wordpress par programme?
- 12. Actualiser/mettre à jour par programme HttpContext.User
- 13. pour enregistrer le numéro de ligne dans mon application par programme
- 14. Comment enregistrer par programme les résultats d'une requête dans un fichier texte?
- 15. Configuration par programme d'endpoints par rapport à web/app.config
- 16. Comment lire et enregistrer le fichier * .doc en Java par programme?
- 17. Connexion par programme au Sharepoint ULS
- 18. Démarrer par programme UserControlTestContainer.exe
- 19. Imprimer FixedDocument par programme
- 20. Recherche google par programme
- 21. Tri JTable par programme
- 22. Appelez par programme @Controller
- 23. Exporter le contrôle Reportviewer C# par programme
- 24. Création d'un ASP: Bouton par programme?
- 25. Tri DataGridView par programme
- 26. Créer TableLayout par programme
- 27. Accès par programme à un contrôle à partir d'un DataTemplate
- 28. enregistrer des fichiers créés par avisynth
- 29. Association d'événements à Session OnStart et OnEnd à l'aide de HttpModules
- 30. Comment exécuter NUnit par programme
L'un des modules, nous sommes using fonctionne correctement lorsqu'il est référencé à partir de web.config, mais ne peut pas être instancié directement (comme indiqué dans votre code) car il est déclaré ami. Une idée de quel contexte devrais-je l'instancier? – Patonza