2011-12-21 4 views
2

전화를 걸고있는 타사 .net dll을 사용 중입니다. 나는 코드를 단순화하고 있지만, 이와 같은 것이다.반영된 형식과 일치하는 메서드 만들기

// The assembly has already been loaded into 'ass' 

Type params = ass.GetType("RemoteCalls.ParametersDelegate"); 
Delegate UseDel = Delegate.CreateDelegate(params, this, "MyGetParams"); 

나는 다음 반사 된 객체에이 위양 (UseDel)를 통과 할 수 있고,가 필요로 할 때 그것은 MyGetParams를 호출합니다.

내가 겪고있는 문제는 메서드 서명이 타사 DLL 내에서 형식으로 구성되어 있다는 것입니다.

ParametersDelegate의 서명은 ...

Parameters GetPars(); 

그래서, 내 방법이 올바른 유형 (매개 변수)를 반환 할 수 없습니다. 나는

Delegate UseDel = Delegate.CreateDelegate(params, this, "OtherDelegates<xxx>.MyGetParams"); 

..

private static class OtherDelegates<T> 
{ 
    public static T MyGetParams() 
    { 
     //... code to build up the 'Parameters' class, and return it. 
    } 
} 

그런 다음 호출 .. 다음 시도하지만 'XXX'에 넣어 무엇을 작동하지 않을 수 있습니다.

CodeDomProvider을 사용하여이 작업을 수행 할 수 있다고 생각하지만 간단한 방법이 있는지 궁금하십니까?

또한 라이선스 문제로 인해 DLL을 참조로 추가하는 옵션이 아닙니다.

감사합니다. 리치.

+0

라이선스 문제가 참조로 * 영향을받는 경우 동일한 라이선스 문제가 어떻게 반영되는지 * 반영하지 않음 * 리플렉션을 사용하여 볼 수 없음 * 더 자세하게 얘기해 주 시겠어요? 이것은 매우 모호한 추측으로 들립니다 ... –

+1

설치/avilable 경우 내 소프트웨어가이 DLL을 활용할 수 싶습니다, 그것을 그것에 의존하고 싶지 않아요. 또한, 개발 관점에서, 나는 모든 개발 기계에이 써드 파티 DLL을 설치하지 않아도된다. 어쨌든, 나는 라이센싱 문제가 아니라 코딩 문제를 해결하려고합니다. –

+0

또한 타사 소프트웨어에 대한 라이센스 수가 제한되어 있으므로 주 소프트웨어를 설치할 때마다 출시 할 수 없습니다. –

답변

2

타사 유형의 인터페이스를 사용하여 제어하는 ​​라이브러리 DLL 뒤에 제 3 자 dll을 완전히 캡슐화합니다. 즉, (이미 빌드 된) 라이브러리 dll을 개별적으로 참조 할 수 있습니다. 물론 제 3 자 dll을 사용할 수 없을 때 정상적으로 실패하는 방식으로 코드를 작성해야합니다.

이 또한이 측면 혜택 :

  • 을 시험하기위한 구현을 조롱 할 수 있습니다 당신은 제 3 자 DLL이 잠재적으로 여러 공급자
  • 을 지원할 수있다
  • 아닌 대체 전략을 제공 할 수 있습니다

위 예제는 대단한 아크 대체 기호로 MapPoint (geo-routing)를 래핑하는 것과 같이 매우 성공적으로 사용했습니다.

플러스 - 당신은 반사와 함께 주위를 망칠 필요가 없습니다!

관련 문제