में कुछ मूल प्रकार के सभी वर्गों को प्राप्त करने के प्रतिबिंब का उपयोग करना मेरे पास एक डीएल है जिसमें कई वर्ग शामिल हैं जो सभी को कमांडबेस क्लास से प्राप्त होता है। मैं सी # में प्रतिबिंब का उपयोग करके इन सभी वर्गों (कमांडए, कमांडबी, कमांडसी, आदि ...) के उदाहरण प्राप्त करने की कोशिश कर रहा हूं ताकि मैं प्रत्येक पर एक विशिष्ट विधि को कॉल कर सकूं। यहां मेरे पास अब तक है:डीएल
//get assemblies in directory.
string folder = Path.Combine(HttpContext.Current.Server.MapPath("~/"), "bin");
var files = Directory.GetFiles(folder, "*.dll");
//load each assembly.
foreach (string file in files)
{
var assembly = Assembly.LoadFile(file);
if (assembly.FullName == "MyCommandProject")
{
foreach (var type in assembly.GetTypes())
{
if (!type.IsClass || type.IsNotPublic) continue;
if(type is CommandBase)
{
var command = Activator.CreateInstance(type) as CommandBase;
}
}
}
}
मुझे 2 समस्याएं हैं। पहला मुद्दा यह है कि "अगर (प्रकार कमांडबेस है") निम्नलिखित चेतावनी देता है:
दी गई अभिव्यक्ति कभी भी उपलब्ध कमांडबेस का नहीं है।
दूसरा मुद्दा यह है कि मैं यह नहीं समझ सकता कि वास्तविक वस्तु (कमांडए, कमांडबी, आदि ...) का उदाहरण कैसे प्राप्त करें, बस इसे कमांडबेस में परिवर्तित करना पर्याप्त नहीं है।
आपकी आखिरी पंक्ति ठीक से उदाहरण नहीं बनाती है? 'एक्टिवेटर के साथ। क्रिएटइंस्टेंस() ', आपके पास कमांडए, कमांडबी ... वर्ग (' टाइप' के आधार पर) का उदाहरण होना चाहिए, नहीं? –
सक्रियण। क्रिएट इंस्टेंस() प्रकार ऑब्जेक्ट देता है। – Justin
हां लेकिन यह आपके द्वारा प्रदान किए गए प्रकार का एक वस्तु देता है। आप इसे "ऑब्जेक्ट" var या "कमांडबेस" var में संग्रहीत कर सकते हैं, यह अभी भी कमांडए, कमांडबी, आदि उदाहरण होगा। आप इसे बाद में अपने "वास्तविक" प्रकार में डाल सकते हैं। मेरे पास जांच करने के लिए एक विजुअल स्टूडियो नहीं है लेकिन मुझे नहीं पता कि समस्या क्या है। –