2016-07-21 6 views
0

Имя интерфейса IService, но когда я пытаюсь найти интерфейс в отражении на C#, он не может найти, потому что по какой-то причине имя интерфейса изменяется на Iservice'1Невозможно найти Интерфейс в C#, используя отражение с Name.EndsWith

Пожалуйста, посмотрите на скриншот для прикрепленного ILDASM:

enter image description here

Фактический интерфейс похож

public interface IService<TOutput> 
     where TOutput : class, new() 
    { 
     Task<List<TOutput>> GetAllAsync(dynamic inputParameter); 
    } 

Код для поиска интерфейса: builder.RegisterAssemblyTypes (Assembly.Load ("Услуги")) .где (т => t.Name.EndsWith ("Сервис"))

Здесь он терпит неудачу найти Сервис, поскольку IService имеет другое имя, а затем определяет его.

Любая идея, почему имя выглядит так и как его решить?

ответ

2

IService является общим. Другими словами, это IService<T>. При компиляции в MSIL, генераторы C# имеют свое имя, измененное, как вы заметили.

Вы можете сделать услугу не общей или использовать .Contains вместо .EndsWith.

+0

Любое сообщение, в котором вы столкнулись с этим? – Dreamweaver

+1

У меня нет ссылки на документацию, но вы можете легко убедиться в этом с отражением. 'typeof (Список ) .Имя ==« Список \ '1» ' – recursive

+0

да, я просто пробовал это .... спасибо .. это меня очень долго искажало ... :) – Dreamweaver