2012-06-23 1 views
2

Я просмотрел документацию на Wiki, но кажется немного тонкой. Как определить, реализует ли тип данного интерфейса с помощью Cecil? Для моей конкретной реализации важно, чтобы я действительно не загружал этот тип в AppDomain.Используйте Mono.Cecil, чтобы определить, реализует ли тип интерфейса

Вот код, который я до сих пор:

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

В C# я реализовал его сравнение полного названия интерфейсов:

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

Вы можете также сравнить TypeDefinition сек, если у вас есть один для вашего интерфейса.

+0

Спасибо, вы можете объяснить, что делает метод Resolve или указать мне на какую-то документацию? Это не загрузка типа в AppDomain? –

+0

@Matt: 'Resolve' получает' TypeDefinition' из 'TypeReference'. В принципе тип можно ссылаться во многих местах, и вы используете 'Resolve', чтобы получить свое определение из одной из этих ссылок. –

+0

... и нет, это не загрузка типа в домене приложения. –