Как отразить сборки, которые уже загружены? - PullRequest
0 голосов
/ 22 октября 2011

У меня есть 2 проекта в решении. Ссылки Project1UI Project2Reports

Project1UI:
  MainForm.cs

Project2Reports:
  BaseReport.cs  // all classes below inherit from it
  Report1.cs
  Report2.cs
  Report3.cs

Из Project1UI, как мне найти все классы, которые наследуются от BaseReport? Project1UI уже ссылается на 2-ую сборку - есть ли способ сделать это без ручной загрузки 2-й сборки вручную (например, Assembly.Load), поскольку она уже загружена.

1 Ответ

1 голос
/ 22 октября 2011

Необходимо обработать все типы в сборке и найти типы, которые ее реализуют.

Вы можете использовать что-то подобное (написанное от руки прямо сейчас, оно может содержать ошибки).

foreach (Type type in Assembly.GetAssembly(typeof(BaseReport)).GetTypes())
{
    if (type != typeof(BaseReport) && typeof(BaseReport).IsAssignableFrom(type))
    {
        // we found a type, we can store it somewhere, for example, in a list and our list in a static readonly field for fast lookup in the future.
        myreports.Add(type);
    }
}

Вы также можете обрабатывать все загруженные сборки.

Это, однако, не лучший способ сделать это, сложный, довольно неясный и довольно трудный для понимания. Я бы использовал простой фабричный класс, который даст вам экземпляр вашего отчета в соответствии с запросом, когда вы добавляете отчет, добавляете его с помощью простого вызова .Add.

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