2012-06-23 3 views
2

Wiki의 설명서를 살펴 봤지만 조금 얇은 것 같습니다. Cecil을 사용하여 유형이 주어진 인터페이스를 구현하는지 어떻게 알 수 있습니까? 특정 구현에서는 AppDomain에 실제로 형식을로드하지 않는 것이 중요합니다.Mono.Cecil을 사용하여 유형이 인터페이스를 구현하는지 확인합니다.

내가 인터페이스의 전체 이름을 비교를 구현 한 C#에서
Dim outputModule As ModuleDefinition = ModuleDefinition.ReadModule(outputFile) 

For Each assemblyType As TypeDefinition In outputModule.Types 
    'How to determine if assemblyType implements a specific interface? 
Next 

답변

4

은 : 당신이있는 경우

if (assemblyType.Interfaces.Any(
    type => type.Resolve().FullName == typeof(YourInterface).FullName 
)) { 
    // ... 
} 

또한 TypeDefinition의를 비교할 수 있습니다 여기에

는 지금까지이 그 코드입니다 귀하의 인터페이스를위한 것.

+0

감사합니다. Resolve 메서드가 수행하는 작업을 설명하거나 문서를 가리킬 수 있습니까? AppDomain에 형식을로드하지 않습니다. –

+0

@Matt :'Resolve'는'TypeReference'에서'TypeDefinition'을 가져옵니다. 기본적으로 타입은 여러 곳에서 참조 될 수 있으며,'Resolve'를 사용하여 그 참조 중 하나에서 정의를 가져올 수 있습니다. –

+0

... 아니요, 앱 도메인에 유형을로드하지 않습니다. –

관련 문제