Hola, estoy intentando invocar dinamicamente el constructor de una clase
heredada de Panel compilada como librería de clases. El código utilizado es
el siguiente:
try
{
Assembly asm=Assembly.LoadFile(Application.StartupPath +
@"\Panels\ComunicatePanel.dll");
foreach(Module m in asm.GetLoadedModules())
{
foreach(Type t in m.GetTypes())
{
if(t.Name=="ComunicatePanel")
{
foreach(ConstructorInfo ci in t.GetConstructors())
{
// ci.Invoke(null);
if(ci.GetParameters().Length>0)
{
ci,Invoke(new object[]{"login", "password"});
}
}
}
}
}
}
catch(Exception exc)
{
MessageBox.Show(exc.Source + "" + exc.Message + "" + exc.StackTrace);
}
La clase tiene dos constructores, uno sin parámetros y otro con parámetros
(vereis que en la línea comentada invoco al primero con null y al segundo
con dos cadenas para pasarle un login y una contraseña), pero llame al que
llame siempre me da el siguiente fallo según el tratamiento de la excepción:
Origen: mscorlib
Mensaje:Se inició una excepción en el destino de la invocación.
StackTrace: at
System.Reflection.RuntimeConstructorInfo.InternalInvoke(BindingFlags
invokeAttr, Binder binder, Object[] parameters, CultureInfo culture, Boolean
isBinderDefault)
at System.Reflection.RuntimeConstructorInfo.Invoke(BindingFlags
invokeAttr, Binder binder, Object[] parameters, CultureInfo culture)
at System.Reflection.ConstructorInfo.Invoke(Object[] parameters)
at PanelSet.Form1.Form1_Load(Object sender, EventArgs e) in c:\documents
and settings\administrador.accweb\mis documentos\visual studio
projects\panelset\form1.cs:line 113
Tengo que decir, que la libreria, cargada desde un proyecto con la librería
referenciada funciona perfectamente.
Pongo también el código de los constructores para que echeis un vistazo:
public ComunicatePanel():base()
{
InitializeComponent();
}
public ComunicatePanel(string login, string perfil):base()
{
_login=login;
_perfil=perfil;
InitializeComponent();
if(!this.DesignMode)
{
ApplicationConnection();
SetSizeMenu();
}
}
¿Alguna idea?
Muchas gracias.
Leer las respuestas