आप नहीं कर सकते। इसके बजाय नीचे दिए गए उदाहरण में दिखाए गए अनुसार Activator.CreateInstance का उपयोग करें (ध्यान दें कि क्लाइंट नेमस्पेस एक डीएलएल में है और होस्ट दूसरे में है। दोनों को कोड के लिए कोड के लिए एक ही निर्देशिका में पाया जाना चाहिए।)
हालांकि, अगर आप बनाना चाहते हैं वास्तव में प्लग करने योग्य इंटरफ़ेस, मेरा सुझाव है कि आप एक प्रारंभिक विधि का उपयोग करें जो कि कन्स्ट्रक्टर पर भरोसा करने के बजाय दिए गए पैरामीटर को आपके इंटरफ़ेस में ले जाएं। इस तरह आप केवल यह मांग सकते हैं कि प्लगइन क्लास "आशा" के बजाय आपके इंटरफ़ेस को कार्यान्वित करे कि यह कन्स्ट्रक्टर में स्वीकृत पैरामीटर स्वीकार करता है।
using System;
using Host;
namespace Client
{
public class MyClass : IMyInterface
{
public int _id;
public string _name;
public MyClass(int id,
string name)
{
_id = id;
_name = name;
}
public string GetOutput()
{
return String.Format("{0} - {1}", _id, _name);
}
}
}
namespace Host
{
public interface IMyInterface
{
string GetOutput();
}
}
using System;
using System.Reflection;
namespace Host
{
internal class Program
{
private static void Main()
{
//These two would be read in some configuration
const string dllName = "Client.dll";
const string className = "Client.MyClass";
try
{
Assembly pluginAssembly = Assembly.LoadFrom(dllName);
Type classType = pluginAssembly.GetType(className);
var plugin = (IMyInterface) Activator.CreateInstance(classType,
42, "Adams");
if (plugin == null)
throw new ApplicationException("Plugin not correctly configured");
Console.WriteLine(plugin.GetOutput());
}
catch (Exception e)
{
Console.Error.WriteLine(e.ToString());
}
}
}
}
स्रोत
2008-09-25 17:38:18
आप इस के साथ कुछ कोड पोस्ट कर सकते हैं? –