2010-10-07 19 views
1

J'utilise dotnet 2.0MethodInfo et délégués

Je sais que, avec une valeur EventInfo, vous pouvez boucle à travers les types de l'Assemblée et trouver toutes les méthodes qui correspondent à la définition de délégué EventInfo (EventInfo.EventHandlerType)

Existe-t-il un moyen de connaître les délégués disponibles pour un MethodInfo donné dans la fonction Delegate.CreateDelegate() sans passer d'abord en revue tous les assemblys référencés pour trouver toutes les définitions Delegate.

Ou suis-je coincé faire ce qui suit:

public bool MethodInfoDelegateSearch(MethodInfo mi) { 
    System.Collections.Generic.List<Type> delegateTypes = new System.Collections.Generic.List<Type>(); 
    foreach (Assembly a in AppDomain.CurrentDomain.GetAssemblies()) 
    foreach (Type t in a.GetTypes()) { 
     if (t.IsSubclassOf(typeof(Delegate))) 
     delegateTypes.Add(t); 
    } 

    for (int i = 0; i < delegateTypes.Count; i++) { 
    Type t = delegateTypes[i]; 
    /* 
    * here is where to attempt match the delegate structure to the MethodInfo 
    * I can compare parameters or just attempt to create the delegate 
    */ 
    try { 
     Delegate.CreateDelegate(t, mi, true); 
     return true; 
    } catch { 
    } 
    } 
    return false; 
} 

Répondre

0

Il semble que comme vous devez boucle à travers tout. Vous dites que vous voulez trouver tous les délégués "disponibles" qui fonctionneraient. La fonction qui accepte un délégué n'a aucun lien avec les méthodes qui pourraient lui être transmises, donc une grande recherche serait la seule façon de tous les trouver.

Vous pouvez réduire le temps passé à chercher en vérifiant uniquement les types avec accès public/interne.