2011-01-27 2 views
1

Mon but est d'énumérer les DLL dans un dossier, de rechercher les classes qui se conforment à une interface spécifique, puis d'interroger ces classes pour les valeurs d'énumération. L'idée étant que je veux demander quelles sont les possibilités de "Outcome" supportées.Réfléchir des valeurs énumérées dans un assemblage externe

J'ai mes DLLs alignés et peut voir les classes qui se conforment à l'interface correcte, cela fonctionne, mais l'étape suivante est de rechercher la classe pour une énumération spécifique et obtenir les valeurs, j'ai utilisé ce qui suit Code:

Private Sub GetOutcomeEnumValues(ByVal AssemblyPath As String, ByVal ClassName As String) 
     Dim ReflectedAssembly As Assembly 
     Dim ReflectedClass As Type 
     'Load DLL 
     ReflectedAssembly = System.Reflection.Assembly.LoadFrom(AssemblyPath) 
     'Load Class 
     ReflectedClass = ReflectedAssembly.GetType(ClassName) 
     'Load members 
     Dim Members() As MemberInfo 
     Members = ReflectedClass.GetMembers 
     For i As Integer = 0 To Members.Count - 1 
      'Check for the Outcomes enumeration 
      If (Members(i).Name = "Outcomes") Then 
       Dim Outcomes As System.Array 
       Outcomes = Members(i).GetType.GetEnumValues 
      End If 
     Next 
    End Sub 

Le problème que j'ai est que je ne peux pas sembler obtenir membres (i) pour me donner les valeurs enum - même si je sais que ce membre est une énumération. Quand j'appelle 'GetEnumValues' une exception est levée:

"Type fourni doit être un Enum Nom du paramètre:. EnumType"

La classe j'Interrogation ressemble à quelque chose comme ça

Public Class Foo 
    Public Enum Outcomes 
     OK 
     Cancel 
    End Enum 
End Class 

Répondre

1

Got it , après avoir expérimenté un peu, j'ai utilisé le code suivant à bon escient:

Private Sub GetOutcomeEnumValues(ByVal AssemblyPath As String, ByVal ClassName As String) 
    Dim ReflectedAssembly As Assembly 
    Dim ReflectedClass As Type 
    'Load DLL 
    ReflectedAssembly = System.Reflection.Assembly.LoadFrom(AssemblyPath) 
    'Load Class 
    ReflectedClass = ReflectedAssembly.GetType(ClassName & "+ Outcomes") 
    'Load members 
    Dim OutcomeNames() As String = ReflectedClass.GetEnumNames 

End Sub 
Questions connexes