2008-10-27 13 views
38

मैं एक ऐप लिख रहा हूं जहां तीसरे पक्ष के विक्रेता प्लगइन डीएलएल लिख सकते हैं और उन्हें वेब ऐप की बिन निर्देशिका में छोड़ सकते हैं। मैं चाहता हूं कि इन प्लगइन्स को यदि आवश्यक हो तो अपने स्वयं के एचटीपी मॉड्यूल पंजीकृत करने में सक्षम होना चाहिए।रनटाइम पर प्रोग्रामेटिक रूप से HttpModules पंजीकृत करें

क्या वैसे भी है कि मैं वेब पर संबंधित प्रविष्टि के बिना रनटाइम पर पाइपलाइन से और पाइपलाइन पर जोड़ सकता हूं या नहीं। क्या मुझे प्रोग्रामेटिक रूप से वेब संपादित करना है। मॉड्यूल जोड़ते/हटाते समय कॉन्फिग करें? मुझे पता है कि किसी भी तरह से ऐपडोमेन पुनरारंभ करने का कारण बन रहा है, लेकिन मैं उसी प्रभाव को प्राप्त करने के लिए web.config को झुकाव करने के बजाय कोड में ऐसा करने में सक्षम हूं।

उत्तर

45

यह HttpApplication जीवन चक्र में सिर्फ सही समय आ गया है, जिस पर किया जा सकता है जब HttpApplication वस्तु आरंभ (कई बार, एक बार HttpApplication के प्रत्येक उदाहरण के लिए)। एकमात्र विधि जहां यह सही काम करता है Http अनुप्रयोग Iit() है।

कोड के माध्यम से एक मॉड्यूल ऊपर हुक करने के लिए आप कर सकते हैं निम्नलिखित बजाय web.config में HttpModule परिभाषा की तरह रन कोड:

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

आपको बस इतना HttpApplication के Init() विधि ओवरराइड है और तब स्थिर उदाहरण की Init विधि तक पहुंचें। मॉड्यूल के init() ईवेंट को हुक करता है और आप जाते हैं।

वाया Rick Strahl's blog

+0

मॉड्यूल हम कर रहे हैं में से एक की तरह WebActivatorX के लिए एक संदर्भ जोड़ने और फिर ऐसा कुछ करने के लिए पैकेज प्रबंधक का उपयोग कर सकते के साथ भेज दिया है वेब.config से संदर्भित करते समय सही ढंग से काम कर रहा है, लेकिन इसे तुरंत चालू नहीं किया जा सकता है (जैसा कि आपके कोड में दिखाया गया है) क्योंकि यह मित्र घोषित किया गया है। किसी भी संदर्भ के किसी भी विचार से मुझे इसे तुरंत चालू करना चाहिए? – Patonza

26

एहसास यह कोई पुराना सवाल है, लेकिन asp.net 4 कुछ नए capablities कि यहाँ मदद कर सकते हैं प्रदान करता है।

विशेष रूप से, एएसपी.नेट 4 प्रीएप्लिकेशंस स्टार्ट मोड क्षमता प्रदान करता है जिसे प्रोग्रामेटिक रूप से HttpModules जोड़ने के लिए उपयोग किया जा सकता है।

मैंने अभी http://www.nikhilk.net/Config-Free-HttpModule-Registration.aspx पर एक ब्लॉग पोस्ट किया था।

मूल विचार यह है कि आप एक व्युत्पन्न Http अनुप्रयोग बनाते हैं जो स्टार्टअप समय पर गतिशील रूप से HttpModules जोड़ने की क्षमता प्रदान करता है, और फिर जब भी प्रत्येक Http अनुप्रयोग उदाहरण ऐप-डोमेन के भीतर बनाया जाता है तो उसे पाइपलाइन में प्रारंभ किया जाता है।

+12

ब्लॉग मृत ... wayback लिंक: http://wayback.archive.org/web/20120719043729/http://www.nikhilk.net/Config- फ्री-HttpModule-Registration.aspx – felickz

12

डीएल माइक्रोसॉफ्ट.Web.Infrastructure.dll के लिए कक्षा DynamicModuleUtility कक्षा के अंदर एक विधि है। dll वेबपेजों 1,0

public static class PreApplicationStartCode 
{ 
    private static bool _startWasCalled; 

    public static void Start() 
    { 
     if (_startWasCalled) return; 

     _startWasCalled = true; 
     DynamicModuleUtility.RegisterModule(typeof(EventTriggeringHttpModule)); 
    } 
} 
0

एएसपी MVC के नए संस्करण में आप इस

using WhateverNameSpacesYouNeed; 

[assembly: WebActivatorEx.PreApplicationStartMethod(typeof(YourApp.SomeNameSpace.YourClass), "Initialize")] 
namespace YourApp.SomeNameSpace 
{ 
    public static void Initialize() 
    { 
    DynamicModuleUtility.RegisterModule(... the type that implements IHttpModule ...); 
    } 
} 
संबंधित मुद्दे