Как получить все типы в проектах решений? - PullRequest
0 голосов
/ 04 апреля 2020

У меня есть решение и несколько. net основных проектов.

  • Проект (решение)
    • WebApi
    • Бизнес
    • Данные

WebApi ссылка на проект Business, но не ссылка на проект Data. Поэтому я хочу получить все типы в решении, которое реализует IMyInterface. У всех проектов есть классы, которые реализуют IMyInterface. Я хочу найти их все.

Я вызываю следующий код в проекте WebApi:

        var m = AppDomain.CurrentDomain.GetAssemblies()
            .SelectMany(name => name.GetTypes())
            .Where(type => typeof(IMyInterface).IsAssignableFrom(type))
            .ToList();

Но типы не найдены.

Как мне найти?

1 Ответ

1 голос
/ 04 апреля 2020

Вы должны получить все проекты сборки, подобные этому

public Assembly[] GetAssemblies()
{
      var dataAssembly = typeof(AnClassInDataLayer).Assembly;
      var businessAssembly = typeof(ACLassInBusinessLayer).Assembly;
      var webApiAssembly = typeof(Startup).Assembly;
      return new Assembly[] { businessAssembly , dataAssembly, webApiAssembly  };
}

, затем

var m = GetAssemblies()
        .SelectMany(name => name.GetTypes())// or .SelectMany(a => a.ExportedTypes)
        .Where(type => typeof(IMyInterface).IsAssignableFrom(type))
        .ToList();

Обновление

In. Net Ядро, если WebApi проект ссылается на слой business и Business слой ссылается на слой Data, поэтому в слое WebApi вы можете получить доступ к Data layer

...