7 messaggi dal 03 ottobre 2008
Ciao a tutti sono nuovo,
Ho un problema, cerco di spiegarmi:

Vorrei creare dinamicamente delle classi ed invocare i metodi ad esse associate.
In poche parole vorrei fare questo:

CL_Adapter.News_Wrapper a = new News_Wrapper();
a.GetData();


Lo vorrei fare a runtime dinamicamente:

Ho provato cosi ma non funziona:
    Assembly a =Assembly.LoadFrom("CL_Adapter.dll");
    Type typeofControl = a.GetType("CL_Adapter.News_Wrapper");
    Activator.CreateInstance(typeofControl);
 // MethodInfo mi = typeofControl.GetMethod("CancellaRecord");
// mi.Invoke(a ,new object[]{"1"});

typeofControl.InvokeMember("GetData", BindingFlags.Default | BindingFlags.InvokeMethod, null, this, null);




Chi mi sa aiutare e dire dove sto errando?
Grazie
Ciao,

quando crei l'istanza memorizzala in una variabile
object myObject = Activator.CreateInstance(typeofControl);


e poi passala al metodo InvokeMember
typeofControl.InvokeMember("GetData", BindingFlags.Default | BindingFlags.InvokeMethod, null, myObject , null); 


m.
7 messaggi dal 03 ottobre 2008
Non va mi da errore in object myObject = Activator.CreateInstance(typeofControl);:
Eccezione generata dalla destinazione di una chiamata.

  Assembly a =Assembly.LoadFrom("CL_Adapter.dll");
Type typeofControl = a.GetType("CL_Adapter.News_Wrapper");
 object myObject =  Activator.CreateInstance(typeofControl);
 typeofControl.InvokeMember("GetData", BindingFlags.Default | BindingFlags.InvokeMethod, null, myObject, null);
            


:(
Ho provato anche cosi:

MethodInfo theMethod = typeofControl.GetMethod("GetData"); 
   theMethod.Invoke(this, null);

ma non va nemmeno in questo modo

ah facendo cosi:

  Assembly a =Assembly.LoadFrom("CL_Adapter.dll");
Type typeofControl = a.GetType("CL_Adapter.News_Wrapper");
 object myObject =new object[]{  Activator.CreateInstance(typeofControl)};
typeofControl.InvokeMember("GetData", BindingFlags.Default | BindingFlags.InvokeMethod, null, myObject, null);
            


Errore:L'oggetto non corrisponde al tipo di destinazione.
Modificato da piccola_peste il 03 ottobre 2008 15.05 -
Vuol dire che il costruttore di quella classe solleva un'eccezione. In debug dovresti essere in grado di capire quale guardando la inner exception.

Ciao
7 messaggi dal 03 ottobre 2008
Allora:
Se faccio cosi:
La classe di test è semplice banale:
namespace CL_TEST
{
    public class Class_test
    {
       public  string stampa() {
            return "stampa";
        }
    }


Dovrei fare a runtime cosi:
e ovviamente va
 CL_TEST.Class_test cl =new Class_test();
            string p = cl.stampa();


Se faccio cosi:


 Assembly a = Assembly.LoadFrom("CL_TEST.dll");
Type typeofControl = a.GetType("CL_TEST.Class_test");
           
object myObject =new object[]{  Activator.CreateInstance(typeofControl)};
             
typeofControl.InvokeMember("Stampa", BindingFlags.Default | BindingFlags.InvokeMethod,null, myObject, null);
            
             


Mi dice:
Impossibile trovare il metodo 'CL_TEST.Class_test.Stampa'. ??
Se metto "stampa" l'errore diventa:
L'oggetto non corrisponde al tipo di destinazione.

cioè dove sbaglio ora,cavolo son 4righe di codice e non ce ne salto fuori
non capisco help
Modificato da piccola_peste il 03 ottobre 2008 15.31 -
ma perchè costruisci un array di object????
7 messaggi dal 03 ottobre 2008
Non lo so il perchè :( era per provare, accetto consigli, soluzioni tutto :(

Come faccio a passare un parametro se il metodo lo richiede?

Grazie per disponibilità
Modificato da piccola_peste il 03 ottobre 2008 15.46 -
Ma ti ho già scritto cosa provare, tu mi hai detto che avevi un errore su Activator.CreateInstance.. cosa c'entra con l'array di object?

Assembly a = Assembly.LoadFrom("CL_TEST.dll");
Type typeofControl = a.GetType("CL_TEST.Class_test");
          
object myObject = Activator.CreateInstance(typeofControl);
            
typeofControl.InvokeMember("Stampa", BindingFlags.Default | BindingFlags.InvokeMethod,null, myObject, null); 


Questo funziona?

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.