2011-10-05 6 views
1

test.aspx.vb와 함께 Test.aspx 페이지가 있다고 가정 해 봅니다.메서드 이름이 문자열에 포함되어있을 때 메서드 호출

Test.aspx.vb에는 "TestClass"라는 클래스 이름이 있습니다. 그 클래스에서 나는 method1(), method2() 및 method3()을 가지고있다.

나는이 메소드 중 하나를 호출 할 수 있어야하지만, 하드 코딩 할 수 없다. 실행될 메소드는 문자열 .

나는

Select Case StringContainingTheNameOfTheDesiredMethod 
    Case "Method1" 
     Method1() 
    Case "Method2" 
     Method2() 
end case 

할 수 없습니다.

나는 반사 (I followed that example)와 함께 할 수있는 방법을 찾을 수 있습니다. 내 문제는 그 메서드는 test.aspx와 상호 작용해야 할 수도 있습니다.하지만 .invoke를 사용하면 새 스레드 또는 컨텍스트를 만들고 test.aspx에 대한 참조가 null이됩니다 (label1.text = "something"이 생성 됨) Null 참조하지만, (호출없이) 방법 항목의 직접 호출은 label1.text 잘 업데이트합니다.

모든 솔루션이 있습니까? 누군가가 나에게 약간의 팁을 줄 수 있습니까?

+0

정확히 하드 코딩 할 수없는 것은 무엇입니까? 메서드 문자열 또는 메서드 호출 자체? –

+0

내가 찾을 수있는 유일한 해결책은 객체를 반환하는 메소드를 호출하고 해당 객체를 데이터 소스로 사용하여 test.aspx와 상호 작용하지만 모든 메소드가 이미 test.aspx.vb에 있으므로 간단 할 수 있습니다. 나는 그 메소드 내에서 test.aspx와 간단히 상호 작용할 수있다. – David

+0

전화 할 선택 사례 (또는 if 문)를 피할 수있는 방법을 찾아야합니까? 방법. 나는 완벽한 세계에서 단순히 excecuteMethod (StringWithMethodName)과 같은 것을 할 것이다. – David

답변

1
Dim xAssembly As Assembly = Assembly.GetExecutingAssembly() 

    Dim xClass As Object = xAssembly.CreateInstance("Paradox.Intranet2.ManageUsers", False, BindingFlags.ExactBinding, Nothing, New Object() {}, Nothing, Nothing) 
    Dim xMethod As MethodInfo = xAssembly.GetType("Paradox.Intranet2.ManageUsers").GetMethod("TestCallFromString") 

    Dim ret As Object = xMethod.Invoke(Me, New Object() {}) 
죄송합니다
1

당신은 시험의 인스턴스를 전달해야 Invoke 방법 페이지 (그래서 당신은 그것을 on the object를 호출). C# 코드 ;-)

MethodInfo method = typeof(TestPage).GetMethod(StringContainingTheNameOfTheDesiredMethod); 
method.Invoke(this, null); 
+0

덕분에 도움이되었습니다. – David

+1

다행스럽게도 대답을 받아 들일 수 있습니까? –

+0

글쎄, 그건 내가 대답을 찾는데 도움이되었지만 정확한 답변이 아니었다 ... 그래서 나는 당신의 코멘트와 대답을지지했다. – David