2016-01-26 2 views
0

Я пытаюсь сделать этот вызов один раз во время запуска.vNext Пример приложения_Start()

var assemblies = BuildManager.GetReferencedAssemblies(); 

Это было перенесено из проекта MVC 4.

Вызов его из Startup.ConfigureServices или Startup.Configure выдает исключение;

System.InvalidOperationException Этот метод не может быть вызван во время фазы инициализации перед запуском приложения.

  1. Где в трубопроводе запуска vNext я могу начать делать вызовы, подобные этим, не конфликтовать с инициализацией предпусковой.

  2. Отдельный вопрос, должен ли я делать этот явный вызов BuildManager.GetReferencedAssemblies(); во время запуска. Причиной для вызова является поиск всех сборок для этого приложения, поиск всех областей приложения, поиск всех контроллеров в приложении и наложение фильтров на все из них. Раньше я налагал фильтры Auth на каждый контроллер и не полагался на разработчиков, чтобы пометить атрибуты [Authorize] для действий. Он поставил точку, чтобы удивить появление дыр в безопасности. Разработчикам пришлось отказаться от конфигурации, сделав это с ними, и это привело к документированному отслеживанию безопасности.

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

Кто-то еще предложил использовать OWIN, но я хотел бы следовать соглашениям vNext, если все возможно, а не смешивать и сопоставлять.

Другое предложение было положить Global.asax обратно, и т.д.

Спасибо за любую сторону, что соответствовало бы тому, как vNext.

+0

Ввод кода в Application_Start в Global.asax может служить вашей цели. – Agalo

+0

BuildManager.GetReferencedAssemblies() не относится к asp.net-core. Также не Glabal.asax. Startup.cs - это точка входа. Я не уверен, как перечислить все сборки. – Tratcher

+0

Если вы ищете способы остаться в ядре и сделать это, взгляните на эту тему на сайте github для coreclr, похоже, что у вас есть несколько причин, чтобы привести вас в правильном направлении (при условии, что все это hasn 't изменено, это 7 месяцев, и все выпуски до сих пор преувеличивают все): https://github.com/dotnet/coreclr/issues/919 –

ответ

0

Вы можете прослушивать событие ApplicationStarted. Попробуйте это

public void Configure(IApplicationBuilder app, IApplicationLifetime lifetime) { 
    lifetime.ApplicationStarted.Register(() => { 
     // Your code goes here 
    }); 
}