2011-01-27 5 views
1

내 목표는 폴더에서 DLL을 열거하고 특정 인터페이스를 준수하는 클래스를 찾은 다음 해당 클래스에서 열거 형 값을 쿼리하는 것입니다. 아이디어는 '결과'의 가능성이 무엇인지를 묻는 것입니다.외부 어셈블리의 열거 형 값 반영하기

DLL을 정렬하고 작동하는 올바른 인터페이스를 따르는 클래스를 볼 수 있지만 다음 단계는 특정 enum 클래스를 검색하여 값을 가져 오는 것입니다. 다음을 사용했습니다. 코드 : -이 회원을 열거 알면서도

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 

내가 가진 문제는 내가 회원 (i)는 나에게 열거 값을주고받을 수없는 것이다. 내가 'GetEnumValues'를 호출하면 예외가 발생합니다 :

"열거 매개 변수 이름이어야합니다 제공을 입력합니다. : enumType"

클래스 I이

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

답변

1

처럼 보이는 뭔가를 조회하고 그것을있어 , 조금 실험 한 후에, 나는 다음과 같은 코드를 사용하여 좋은 결과를 얻었습니다 :

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