का उपयोग कर डीएलएल में ओवरराइडिंग विधि मुझे यह भी सुनिश्चित नहीं है कि यह संभव है तो माफ़ी नहीं है। मैंने काफी बड़े पैमाने पर गुमराह किया है और जो भी मैं ढूंढ रहा हूं उसे नहीं मिला।प्रतिबिंब
असल में हमारे पास एक तीसरे पक्ष द्वारा उत्पादित एक आवेदन है, जो पूरी तरह से बदमाश होने के लिए बकवास है। हमारे पास एक विशेष समस्या है और डीएलएल के भीतर एक विधि में ILSpy का उपयोग कर समस्या का पता लगाने में कामयाब रहा है। स्पष्ट रूप से हमारे पास स्रोत कोड नहीं है (न ही प्राप्त करने में सक्षम हैं) और कंपनी किसी भी उचित समय-समय पर समस्या को ठीक करने के लिए तैयार नहीं है।
तो, हमने जांच के विभिन्न मार्गों की जांच की है और कुछ भी नहीं आया है। मैं यह देखने में देख रहा हूं कि यह प्रतिबिंब का उपयोग करके किया जा सकता है और यह आखिरी उम्मीद है कि हमें यह काम करने के लिए मिल रहा है।
- मौजूदा DLL के रूप में एक ही नाम के साथ एक सरल वर्ग पुस्तकालय बनाएं
- उपयोग प्रतिबिंब
- किसी तरह मौजूदा DLL से तरीकों आयात करने के लिए: संक्षेप में, मुझे क्या करना चाहते हैं निम्नलिखित है अपने स्वयं के साथ प्रश्न में विधि को ओवरराइड करें, सही कोड
- कोड को पुनर्निर्माण करें, इसलिए मेरे पास एक नया डीएलएल है, जिसमें मौजूदा डीएलएल की 99% कार्यक्षमता है लेकिन मेरे ओवरराइड कोड सही कार्यक्षमता प्रदान करते हैं।
मैंने पाया है कि, मेरी जांच के दौरान TypeBuilder.DefineMethodOverride और StackOverflow से एक पृष्ठ भी मिलता है, जो समान लगता है लेकिन काफी कुछ नहीं जो मैं ढूंढ रहा हूं।
http://msdn.microsoft.com/en-us/library/system.reflection.emit.typebuilder.definemethodoverride.aspx
Is there a way to "override" a method with reflection?
किसी भी सलाह की सराहना की!
एंड्रयू
संपादित
अन्य संभावित विचार मैं है ओवरराइड समारोह युक्त एक आंशिक वर्ग के उत्पादन के लिए गया था, लेकिन है कि या तो संभव नहीं मालूम था।
आश्चर्य है कि एक इंटरसेप्टर आधारित दृष्टिकोण यहां काम करेगा - कैसल डायनैमिकप्रॉक्सी जैसे कुछ: http://www.castleproject.org/projects/dynamicproxy/ - जाहिर है कि आप पूरी तरह से विधि कॉल को प्रतिस्थापित नहीं करेंगे, लेकिन आप निश्चित रूप से अवरोध कर सकते हैं/त्रुटि संभाल और tweak (ओह हाँ और यह निर्भर करता है कि कक्षा में आभासी तरीकों हैं) – Charleh
क्यों न केवल एक कक्षा बनाओ, जैसा कि आपने कहा था, जो उस विधि को छोड़कर अधिकांश चीजों के लिए तीसरे पक्ष की कक्षा को कॉल करता है जिसे आप ओवरराइड करना चाहते हैं? या उस वर्ग से निकला है और उस विधि के लिए एक और नाम का उपयोग करें? क्या आपको वास्तव में 1 अद्वितीय डीएल के अंदर रहने की ज़रूरत है? इसे 2 में विभाजित क्यों नहीं करें? – ppetrov