पर कक्षा को डाला गया है, मैं कुछ .dll फ़ाइलों को गतिशील रूप से लोड करने का प्रयास कर रहा हूं। फ़ाइलें प्लगइन्स हैं (अब के लिए स्वयं लिखित) जिनमें कम से कम एक वर्ग है जो MyInterface
लागू करता है। प्रत्येक फ़ाइल के लिए मैं कर रहा हूँ निम्नलिखित:सी # एक इंटरफेस सूची
Dictionary<MyInterface, bool> _myList;
// ...code
Assembly assembly = Assembly.LoadFrom(currentFile.FullName);
foreach (Type type in assembly.GetTypes())
{
var myI = type.GetInterface("MyInterface");
if(myI != null)
{
if ((myI.Name == "MyInterface") && !type.IsAbstract)
{
var p = Activator.CreateInstance(type);
_myList.Add((MyInterface)p, true);
}
}
}
यह एक डाली अपवाद का कारण बनता है चल रहा है, लेकिन मैं एक समाधान नहीं मिल रहा। वैसे भी मैं सोच रहा हूं कि यह बिल्कुल क्यों काम नहीं करता है। मैं .NET Framework 3.5 में एक समाधान की तलाश में हूं।
एक और बात यह है कि मुझे क्या हुआ null
p
में उपरोक्त कोड में _myList
में एक नई प्रविष्टि जोड़ने से पहले बिंदु पर निम्नलिखित चलाने के बाद हो रही थी:
var p = type.InvokeMember(null, BindingFlags.CreateInstance, null,
null, null) as MyInterface;
इस कोड को किया गया था पहला प्रयास लोड हो रहा है पर प्लगइन्स, मुझे नहीं पता था कि क्यों p
null
था। मुझे उम्मीद है कि कोई मुझे सही तरीके से ले जा सकता है :)
यह कोड काम नहीं कर रहा है, एक्स क्या है और आप इसे कहां रखते हैं? – devundef
उपरोक्त आपके कोड स्निपेट में, "x" है "if (x! = Null)" वास्तव में "myI" होना चाहिए? –
आपको यह भी सत्यापित करना चाहिए कि इस प्रकार का डिफॉल्ट कन्स्ट्रक्टर है, क्योंकि आपका कोड यह मानता है। –