2015-08-28 5 views
5

मैं एक HTTPModule बना रहा हूं जिसे कुछ बार पुन: उपयोग किया जा सकता है, लेकिन विभिन्न मानकों के साथ। एक उदाहरण के रूप में सोचें, एक अनुरोध पुनर्निर्देशक मॉड्यूल। मैं एक HTTPHandler का उपयोग कर सकता हूं लेकिन यह इसके लिए कोई काम नहीं है क्योंकि मेरी प्रक्रिया को अनुरोध स्तर पर काम करने की आवश्यकता है, न कि एक्सटेंशन/पथ स्तर पर।web.config में HTTP मॉड्यूल के अपने पैरामीटर प्राप्त करें?

फिर भी, मैं अपने web.config इस तरह से करना चाहते हैं:

<system.webServer> 
    <modules> 
     <add name="tpl01" type="TemplateModule" arg1="~/" arg2="500" />  
     <add name="tpl02" type="TemplateModule" arg1="~/" arg2="100" />  
    </modules> 
</system.webServer> 

लेकिन सबसे जानकारी मैं मिल सकता है this था। मैं कहता हूं, हाँ, मैं पूरे <modules> टैग प्राप्त कर सकता हूं, लेकिन मेरे HTTP मॉड्यूल के प्रत्येक उदाहरण को कौन से तर्क लेने के बारे में पता है? अगर मुझे सृजन पर नाम (tpl01 या tpl02) मिल सकता है, तो मैं बाद में नाम से इसके तर्क देख सकता हूं, लेकिन मुझे इसे प्राप्त करने के लिए HTTPModule क्लास में कोई भी प्रॉपर्टी दिखाई नहीं दे रही थी।

किसी भी मदद का वास्तव में स्वागत किया जाएगा। अग्रिम में धन्यवाद! :)

+0

HttpModuleCollection में ऑलकेस संपत्ति है। प्रत्येक कुंजी के लिए आप (कुंजी) प्राप्त कर सकते हैं और जांच सकते हैं कि रिटर्न आपके मॉड्यूल के नाम को निर्धारित करने के लिए आपके मॉड्यूल के बराबर है या नहीं। –

उत्तर

-1

यह अपनी समस्या के लिए एक समाधान हो सकता है -

"जोड़ें" तत्व में संभव atttributes देखें

सबसे पहले, आप क्या बाहर से निर्धारित करने की आवश्यकता के लिए क्षेत्रों के साथ अपने मॉड्यूल को परिभाषित:

public class TemplateModule : IHttpModule 
{ 
    protected static string _arg1; 
    protected static string _arg2; 

    public void Init(HttpApplication context) 
    { 
     _arg1 = "~/"; 
     _arg2 = "0"; 

     context.BeginRequest += new EventHandler(ContextBeginRequest); 
    } 

    // ... 
} 

फिर, अपने वेब एप्लिकेशन से, हर बार जब आप उन मूल्यों का एक अलग सेट के साथ मॉड्यूल का उपयोग करने की आवश्यकता है, मॉड्यूल का उत्तराधिकारी और फ़ील्ड ओवरराइड करें:

public class TemplateModule01 : Your.NS.TemplateModule 
{ 
    protected override void ContextBeginRequest(object sender, EventArgs e) 
    { 
     _arg1 = "~/something"; 
     _arg2 = "500"; 

     base.ContextBeginRequest(sender, e); 
    } 
} 

public class TemplateModule02 : Your.NS.TemplateModule 
{ 
    protected override void ContextBeginRequest(object sender, EventArgs e) 
    { 
     _arg1 = "~/otherthing"; 
     _arg2 = "100"; 

     base.ContextBeginRequest(sender, e); 
    } 
} 
+0

यह सिर्फ एक भयानक दौड़ स्थिति त्रुटि होने का इंतजार कर रहा है। बेस क्लास में एक नई आभासी विधि बनाएं और बच्चे वर्गों से अलग-अलग तर्कों के साथ कॉल करें। तर्क * पास करने के लिए स्थिर फ़ील्ड का उपयोग न करें, यह मूर्खतापूर्ण है। –

2

मुझे लगता है कि कॉन्फ़िगर (system.webServer \ modules \ add) का यह हिस्सा मॉड्यूल को पैरामीटर (स्टोर) पैरामीटर पास करने का इरादा नहीं है, लेकिन अनुरोध संसाधित करने के लिए मॉड्यूल की सूची पंजीकृत करने के लिए है। https://msdn.microsoft.com/en-us/library/ms690693(v=vs.90).aspx

संबंधित मुद्दे