मैं इस के समान कोड का उपयोग कर एक विशिष्ट इंटरफ़ेस को लागू प्रकार के लिए एक विधानसभा स्कैन करने के लिए कोशिश कर रहा हूँ:जब Assembly.GetTypes() कॉल ReflectionTypeLoadException को रोकने के लिए
public List<Type> FindTypesImplementing<T>(string assemblyPath)
{
var matchingTypes = new List<Type>();
var asm = Assembly.LoadFrom(assemblyPath);
foreach (var t in asm.GetTypes())
{
if (typeof(T).IsAssignableFrom(t))
matchingTypes.Add(t);
}
return matchingTypes;
}
मेरे समस्या है, कि मैं एक ReflectionTypeLoadException
मिल कुछ मामलों में asm.GetTypes()
पर कॉल करते समय, उदाहरण के लिए यदि असेंबली में ऐसे असेंबली का संदर्भ देने वाले प्रकार होते हैं जो वर्तमान में उपलब्ध नहीं हैं।
मेरे मामले में, मुझे समस्या का कारण बनने वाले प्रकारों में कोई दिलचस्पी नहीं है। जिन प्रकारों को मैं खोज रहा हूं उन्हें गैर-उपलब्ध असेंबली की आवश्यकता नहीं है।
सवाल यह है: क्या किसी भी तरह से अपवाद का कारण बनने वाले प्रकारों को छोड़ना/अनदेखा करना संभव है लेकिन असेंबली में निहित अन्य प्रकारों को अभी भी संसाधित करना संभव है?
यह जो भी आप खोज रहे हैं उससे अधिक पुनर्लेखन हो सकता है, लेकिन एमईएफ आपको समान कार्यक्षमता देता है। बस अपने प्रत्येक वर्ग को एक [निर्यात] टैग के साथ चिह्नित करें जो यह लागू इंटरफ़ेस निर्दिष्ट करता है। फिर आप उस समय उन इंटरफेस को आयात कर सकते हैं जिन्हें आप रुचि रखते हैं। –
@Drew, आपकी टिप्पणी के लिए धन्यवाद। मैं एमईएफ का उपयोग करने के बारे में सोच रहा था, लेकिन यह देखना चाहता था कि कोई दूसरा, सस्ता समाधान है या नहीं। – M4N
प्लगइन क्लास फैक्ट्री को एक प्रसिद्ध नाम दे रहा है ताकि आप केवल एक्टिवेटर का उपयोग कर सकें। क्रिएटइंस्टेंस() सीधे एक साधारण कामकाज है। फिर भी, अगर आपको असेंबली रिज़ॉल्यूशन की समस्या के कारण अब यह अपवाद मिलता है तो आपको शायद बाद में भी मिल जाएगा। –