Sto tentando di caricare un assembly durante l'esecuzione e di sottoscrivere i suoi eventi. Nel mio scenario il file dll ha un metodo ADD che ottiene due interi come argomenti e genera un evento con un argomento evento personalizzato che contiene la somma.Iscriviti a un evento di un assembly caricato
Ecco una parte del mio codice per caricare il file DLL:
Assembly asm = Assembly.LoadFile(@"C:\Projects\Dll1.Dll");
Type typ = asm.GetType("DLL1.Class1", true, true);
var method = typ.GetMethod("add");
var obj = Activator.CreateInstance(typ);
EventInfo ev1 = typ.GetEvents()[0]; // just to check if I have the proper event
Type tDelegate = ev1.EventHandlerType; // just to check if I have the proper delegate
method.Invoke(obj, new object[] { 1, 0 });
Ma, non ho idea di come iscriversi all'evento sollevata dal montaggio. Qualsiasi aiuto sarebbe apprezzato.
Aggiunto: sorgente di esempio DLL
namespace Dll1
{
public class Class1
{
int c = 0;
public void add(int a, int b)
{
c = a + b;
if (Added !=null)
Added(this, new AddArgs(c));
}
public delegate void AddHandler(object sender, AddArgs e);
public event AddHandler Added;
}
public class AddArgs : EventArgs
{
private int intResult;
public AddArgs(int _Value)
{
intResult = _Value;
}
public int Result
{
get { return intResult; }
}
}
}
Grazie, ancora due domande. in base alla pagina AddEventHandler, ho bisogno di creare un assembly dinamico e un gestore di eventi per avere la stessa firma del delegato nell'assembly caricato. 1) l'esempio non mostra come si possa ottenere il risultato di ritorno da ILGenerator. 2) C'è un modo più semplice per scrivere il metodo MyEventHandler, se conosco la firma in anticipo. Ho aggiunto il codice sorgente per l'esempio Dll alla domanda, se aiuta. – Afshin