No puede. En su lugar, use Activator.CreateInstance como se muestra en el ejemplo siguiente (tenga en cuenta que el espacio de nombres del Cliente está en una DLL y el Host en otra. Ambos deben encontrarse en el mismo directorio para que funcione el código.)
Sin embargo, si desea crear una interfaz verdaderamente conectable, le sugiero que use un método Initialize que tome los parámetros dados en su interfaz, en lugar de depender de los constructores. De esta forma, puede exigir que la clase de complemento implemente su interfaz, en lugar de "esperar" que acepte los parámetros aceptados en el constructor.
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());
}
}
}
}
Podría publicar algo de código con esto? –