2011-04-27 2 views
1

사용하려는 WPF 응용 프로그램이 있습니다..NET에서 리플렉션을 사용하여 생성자를 통해 객체를 생성 한 후 특정 객체를 호출하는 방법은 무엇입니까?

Assembly.LoadFrom 

잘 작동하지만 이후 기본 생성자를 호출하려고합니다.

LayerView.MainWindow(); 

그런 다음 Show 메서드를 호출합니다. 생성 된 인스턴스

assembly.GetTypes(); 

그 (것)들을 통해 반복하고 그 때 나가 적당한 유형 LayerView.MainWindow를 찾아 낼 때, 그 때 부르십시오 :

c.getConstructors(); 

그 (것)들을 통해 루핑하고 나가 맞은 ctor를 찾아 낼 때, :

ctor.Invoke (null); 

하지만 인스턴스를 만든 후에 아무 것도 보이지 않기 때문에 제대로 작동하는지 확실하지 않습니다. 나는 Show 메서드를 호출해야하고 그것이 내가 붙어있는 곳이다. 내가 만든 인스턴스에 액세스하는 방법을 모르겠습니다.

또한 이것을 수행하는 가장 좋은 방법입니까? 맞은 것을 찾기 위해 이것들을 반복하는 것은 꽤 clunky 한 것처럼 보인다. 어쩌면 이것은 Linq을 사용하여 더 좋게 만들 수 있습니까?

답변

3

ctor.Invoke(null)의 결과를 원하는 유형의 객체로 캐스팅 해보세요. 여기에 (주 : 당신이 그것을 캐스팅 유형을 파악해야합니다 있도록이 LayerView 아니라면 나는, 당신의 전화를 생성자 정확히 모르겠어요) : 예입니다

var view = (LayerView)ctor.Invoke(null); 
view.Show(); 

http://msdn.microsoft.com/en-us/library/6ycw1y17.aspx

Invoke 메서드가 ConstructorInfo이면 object 참조가 반환되므로 원하는 형식으로 캐스팅해야합니다.

+0

감사합니다.하지만'MainWindow' 타입은 exe 안에 정의되어 있기 때문에 어떻게 사용할 건지, 참고로 추가하지는 않았습니다. –

+1

방금 ​​개체 값을 type.InvokeMember에 전달 했으므로 작동합니다. 감사. –

+1

'Window'또는 Show 클래스가 상속하는 모든 클래스 (Show 메서드가있는 클래스)와 같은 수퍼 유형으로 캐스팅 해 볼 수 있습니다. –

관련 문제