हम अपने आवेदन के लिए प्लगइन ढांचे को लागू करते हैं और असेंबली का उपयोग करके प्लगइन असेंबली लोड करते हैं। लोड से। हम फिर GetTypes() का उपयोग करते हैं और समर्थित इंटरफेस के लिए प्रत्येक प्लगइन फ़ाइल के साथ प्रकारों की जांच करते हैं।असेंबली। गेट टाइप्स() - प्रतिबिंब टाइप टाइपऑक्सप्शन
प्लगइन के लिए एक पथ उपयोगकर्ता द्वारा प्रदान किया जाता है और हम फ़ोल्डर में प्रत्येक फाइल के माध्यम से चक्र देखते हैं कि यह (प्लगइन) हमारे प्लगइन इंटरफ़ेस का समर्थन करता है या नहीं। यदि ऐसा होता है, तो हम एक उदाहरण बनाते हैं, अगर हम अगली फ़ाइल पर नहीं जाते हैं।
हम एक कोड बेस (appA_1 और appA_2) से सॉफ़्टवेयर के दो संस्करण बनाते हैं।
प्लगइन लोड हो रहा है जब प्लगइन प्लगइन फ़ाइल के रूप में एक ही समय में बनाया गया अनुप्रयोग द्वारा लोड किया जाता है। हालांकि अगर हम appA_2 बनाते हैं और ऐपजेयर के प्लगइन फ़ोल्डर को इंगित करते हैं, तो GetTypes() को कॉल करते समय हमें अपवाद मिलता है।
हमारे कोड का एक मूल संस्करण है;
var pluginAssembly = Assembly.LoadFrom(FileName);
foreach (var pluginType in pluginAssembly.GetTypes())
{
हमें "प्रतिबिंब टाइप टाइप अपवाद" अपवाद मिलता है।
यह संबंधित है क्योंकि हम चाहते हैं कि हमारा एप्लिकेशन किसी भी प्लगइन के प्रकार को लोड करने में सक्षम हो। क्या हम कुछ खो रहे हैं?
संपादित करें: लोडर अपवादों के माध्यम से पुनरावृत्ति के बाद हमने पाया है कि एक फ़ाइल libPublic.dll है जो System.IO.FileNotFoundException अपवाद उत्पन्न करती है। अजीब बात यह है कि यह फ़ाइल एप्लिकेशन निर्देशिका में रहती है और प्लगइन को प्रोजेक्ट फ़ाइल में संदर्भित किया जाता है।
संपादित करें 2: अपवाद लॉग हम निम्नलिखित मिल में "विधानसभा नाम मुकाबले बेमेल में हुई: संशोधन संख्या"
अपवाद संदेश क्या है? क्या अपवाद में आंतरिक अपवाद है? इसका संदेश क्या है? – dtb
कोई कारण नहीं है कि आप मौजूदा फ्रेमवर्क जैसे एमईएफ का उपयोग नहीं कर रहे हैं? – dtb
एमईएफ का उपयोग करते समय भी आप इस तरह की समस्याएं पैदा कर सकते हैं, हालांकि एमईएफ निश्चित रूप से गंदे काम की देखभाल करने के लिए आसान है। –