Отражать над списком контроллеров - PullRequest
6 голосов
/ 10 сентября 2010

Я немного новичок в отражении в c #. Я пытаюсь создать список всех контроллеров, чтобы проверить, украшены ли они определенным actionfilter. Когда вы пишете юнит-тесты, как вы получаете доступ к протестированной сборке?

Это не похоже на работу:

var myAssembly = System.Reflection.Assembly.GetExecutingAssembly();

Ответы [ 3 ]

4 голосов
/ 10 сентября 2010

Если вы знаете тип вашей основной сборки, вы можете использовать:

    private IEnumerable<Type> GetControllers()
    {
        return from t in typeof(MyType).Assembly.GetTypes()
               where t.IsAbstract == false
               where typeof(Controller).IsAssignableFrom(t)
               where t.Name.EndsWith("Controller", StringComparison.OrdinalIgnoreCase)
               select t;
    }

Заменить MyType на известный тип.

Я использую это в базовом классе с this.GetType() вместо typeof(MyType), так что я могу ссылаться на сборку, в которой определен производный тип .

0 голосов
/ 10 сентября 2010

Assembly.GetAssemblyByName() - вероятно, билет для поиска сборки, отличной от вашей.Он будет смотреть в привязках сборки вашего приложения, затем в текущем каталоге приложения, затем в GAC.Вы также можете получить класс Assembly с данным экземпляром объекта или типом со статической ссылкой, вызвав GetType().Assembly.

. Из этого класса Assembly вы можете перебирать содержащиеся в нем типы как объекты Type, используя GetExportedTypes(),Это вернет только открытые типы;те, к которым вы могли бы получить доступ, если бы вы ссылались на сборку статически.Вы можете отфильтровать их по всему, что вы можете рефлексивно проанализировать;имя, родительские типы, имена членов, атрибуты, украшающие класс или любого члена, и т. д.

0 голосов
/ 10 сентября 2010

Вы будете знать название сборки во время написания своих тестов. Использование Assembly.ReflectionOnlyLoad() является подходящим выбором для этого сценария.

В качестве альтернативы вы можете извлечь из свойства Assembly любого известного типа из сборки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...