Для этого есть два шага:
-
AppDomain.CurrentDomain.GetAssemblies()
предоставляет вам все сборки, загруженные в текущем домене приложения.
- Класс
Assembly
предоставляет метод GetTypes()
для извлечения всех типов в этой конкретной сборке.
Следовательно, ваш код может выглядеть так:
foreach (Assembly a in AppDomain.CurrentDomain.GetAssemblies())
{
foreach (Type t in a.GetTypes())
{
// ... do something with 't' ...
}
}
Чтобы искать конкретные типы (например, реализовать определенный интерфейс, наследовать от общего предка или что-то еще), вам придется отфильтровать результаты. В случае, если вам нужно сделать это в нескольких местах приложения, рекомендуется создать вспомогательный класс с различными параметрами. Например, я обычно применяю фильтры префиксов пространства имен, фильтры реализации интерфейса и фильтры наследования.
Для получения подробной документации посмотрите MSDN здесь и здесь .