Stranezza su metodo Invoke (Reflection)

sabato 13 marzo 2010 - 20.11

Marques Profilo | Newbie

Ciao a tutti,

ho un problema utilizzando il metodo Invoke relativamente alla classe Reflection.
Ho un progetto che gira sotto il framework 2.0, scritto in C# così composto:

- Un layer con le classi di gestione dei dati (comprese in un assembly apposito)
- Un layer con i files ASPX che fanno da interfaccia tra l'utente ed il layer dati (altro assembly)

La mia intenzione è quella di permettere di associare, al verificarsi di un dato evento, l'esecuzione automatica di un metodo contenuto in una classe dello stesso assembly.

A tal proposito ho quindi creato una classe apposita che fa dei controlli e delle operazioni di preparazione e poi avvia la vera e propria procedura per instanziare dinamicamente la classe "target" e richiamare il metodo desiderato.

Questa è la porzione di codice che uso per questo scopo:

Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra

Nel codice sono utilizzate delle variabili che contengono i nomi dei metodi, ma il risultato sarebbe il seguente:

Type targetClass = Type.GetType("DataLayer.Documenti"); object instance = Activator.CreateInstance(targetClass, dbLink); try { targetClass.GetMethod("Documenti").Invoke(instance, parameters); } catch (Exception ex) { }

Il costruttore della classe "target" prevede la ricezione di un oggetto OdbcConnection che deve rappresentare una connessione al database (quindi c'è il codice opportuno con Activator.CreateInstance).

Poi subito dopo richiamo il metodo interessato con l'uso di Invoke che in questo caso è un metodo pubblico, che non restituisce nulla (void) e si limita ad effettuare un UPDATE sul database.

La cosa strana è che, se nel metodo richiamato con Invoke eseguo SOLAMENTE l'operazione di UPDATE allora è come se il metodo non venisse richiamato (il database non presenta le modifiche desiderate) mentre, se nel metodo, dopo aver seguito l'update scateno un'eccezione (throw new Exception("")) allora ovviamente l'applicazione va in errore e stranamente le modifiche vengono apportate.

Sto provando a cercare su internet ma è un problema davvero strano, è mai capitato qualcosa del genere a qualcuno di voi? Che spiegazione potrebbe esserci?

Spero di essere riuscito a spiegare bene il problema e la struttura della mia applicazione, se c'è qualche dubbio ovviamente chiedete pure.

Grazie in anticipo.
Saluti
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2017
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5