Я сейчас начал изучение .NET Core 2.0. Практически сразу рассматривается конвейер http и компоненты middleware. Изучаю по этим статьям. После прочтения:
Класс middleware должен иметь конструктор, который принимает параметр типа RequestDelegate. Через этот параметр можно получить ссылку на тот делегат запроса, который стоит следующим в конвейере обработки запроса.
Также в классе должен быть определен метод, который должен называться либо Invoke, либо InvokeAsync. Причем этот метод должен возвращать объект Task и принимать в качестве параметра контекст запроса - объект HttpContext. Данный метод собственно и будет обрабатывать запрос.
у меня возник вопрос: почему бы просто не определить интерфейс для middleware компонентов, а не делать ограничения на уровне соглашения?
Я уверен, что у разработчиков были веские причины на это. Но я бы хотел понять какие. Ведь сейчас, как я понимаю (возможно ошибаюсь), используется рефлексия, чтобы определить есть ли у типа объекта метод Invoke или InvokeAsync.
Все ради гибкости. Invoke позволяет объявить дополнительные параметры, значения которых будут разрезолвлены через DI:
public async Task Invoke(HttpContext ctx,
IHostingEnvironment host,
ISomethingElse service)
{
// ...
}
... а механизм интерфейсов не позволяет объявлять методы с заранее неизвестными параметрами.
enSO: Why middleware in ASP.NET Core requires specific semantics, but not an interface?
Виртуальный выделенный сервер (VDS) становится отличным выбором
Нужно текст разбить на массив из слов - подобное делается c помощью Split ?
Есть программа ("Электронной очереди") написанная на C# под фреймворкNET 4
Здравствуйте! Помогите пожалуйстаУ меня есть ComboBox в форме
Проект работал нормально, запушил его на Гит, пересобрал все refferences, перебилдилИ вот такая ошибка вылезла: