2010-12-13 2 views
0

그래서 어셈블리를 런타임에로드하고 있으며 어셈블리 유형에 따라 제네릭을 사용하고 있습니다. 올바른 유형을 얻으려면 각 DLL은 올바른 제네릭 형식으로 클래스를 인스턴스화하는 팩토리를 구현하고 있습니다.MethodInfo.Invoke는 Windows 7에서 관리자가 필요합니까?

  Type factoryType = assembly.GetType("MyCompany.ScenarioPlayer.PlayerFactory"); 
      MethodInfo method = factoryType.GetMethod("CreatePlayer", BindingFlags.Public | BindingFlags.Static); 

      player = (IScenarioPlayer)method.Invoke(null, null); 

이 코드는 메서드에서 실패합니다. 관리자 권한이 없는데도 알리십시오. 이게 올바른지 MethodInfo.Invoke에 대한 모든 호출에 내가 관리자를 필요로하는 방식이 필요합니까? DLL의 코드를 밟았지만이 호출을 공장으로 보내지도 않았습니다.

편집 : 계산되지 않은 대상 DLL에 대한 종속성이 있습니다. 그래도 제안 된 MEF 프레임 워크 아이디어가 마음에 든다.

+0

예외 메시지 및 스택 추적을 게시하십시오. –

답변

2

이것은 MethodInfo와 아무 관련이 없지만 MethodInfo가 가장 잘하고있는 것입니다. 문제의 메서드를 호출하고 비 관리 환경에서 작동하는지 확인하여 테스트 할 수 있습니다.

+0

이것이 내가 처음에해야 할 일 중 하나인데도 실제로이 문제를 해결하는 데 도움이되었습니다. 감사합니다 – Tom

3

리플렉션을 사용하는 방식으로 런타임에 팩토리를 생성하는 문제를 해결하는 것은 좋지 않은 아이디어입니다. 이 아닌은 커플 링을 피할뿐만 아니라 (하나의 유형을 참조하는 하드 코딩 된 문자열을 가지고 있습니다.) 당신은 상처의 세계를 열어 놓았습니다. 이 물건들 중 아무 것도 강하게 타이핑되지 않습니다.

플러그 가능 구성 요소를 만들려는 경우 MEF과 같은 것을 제안합니다. 그것은 이미 당신이 직면하는 문제를 해결합니다 훨씬 더 빠르고, 더 maintainable 방식으로 않습니다 않습니다.

+0

+1 MEF ... 그리고 그것의 첫 번째 수준의 시민 .Net 4 –

+0

나는 MEF를 많이 보게 될 것입니다. – Tom