Как получить информацию о контроллере во время запуска в. NET Core 3 - PullRequest
2 голосов
/ 08 января 2020

У меня есть приложение. NET Core 3 Web Api, и мне нужно, во время процесса запуска, получить доступ ко всем моим методам Controllers, чтобы увидеть, какие атрибуты у них есть, и сохранить эту информацию в словаре.

Startup.cs

public void ConfigureServices(IServiceCollection services)
{            
    services.AddControllers(); // is is possible to get more info about the controllers here?
}

Я знаю, что могу добиться этого, используя рефлексию, просматривая все классы с помощью Controller в двоичном файле и просматривая их методы и получая доступ к их атрибутам. Мой вопрос: есть ли другой путь? Поскольку мне нужно добавить контроллеры при запуске, может быть, я смогу получить больше информации о них?

1 Ответ

1 голос
/ 08 января 2020

Вы можете сделать это таким же образом Простой Инжектор делает это для регистрации контроллеров в контейнере. Что-то вроде:

services.AddControllers();
var manager = (ApplicationPartManager)services
    .LastOrDefault(d => d.ServiceType == typeof(ApplicationPartManager))
    .ImplementationInstance;
var feature = new ControllerFeature();
manager.PopulateFeature(feature);
var controllerTypes = feature.Controllers.Select(t => t.AsType());
...