Почему в .net core 2.0 нет интерфейса IMiddleware?

193
06 декабря 2017, 21:55

Я сейчас начал изучение .NET Core 2.0. Практически сразу рассматривается конвейер http и компоненты middleware. Изучаю по этим статьям. После прочтения:

Класс middleware должен иметь конструктор, который принимает параметр типа RequestDelegate. Через этот параметр можно получить ссылку на тот делегат запроса, который стоит следующим в конвейере обработки запроса.

Также в классе должен быть определен метод, который должен называться либо Invoke, либо InvokeAsync. Причем этот метод должен возвращать объект Task и принимать в качестве параметра контекст запроса - объект HttpContext. Данный метод собственно и будет обрабатывать запрос.

у меня возник вопрос: почему бы просто не определить интерфейс для middleware компонентов, а не делать ограничения на уровне соглашения?

Я уверен, что у разработчиков были веские причины на это. Но я бы хотел понять какие. Ведь сейчас, как я понимаю (возможно ошибаюсь), используется рефлексия, чтобы определить есть ли у типа объекта метод Invoke или InvokeAsync.

Answer 1

Все ради гибкости. 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?

READ ALSO
Текст разбить на массив из слов

Текст разбить на массив из слов

Нужно текст разбить на массив из слов - подобное делается c помощью Split ?

244
BSOD при работе программы под .NET 4.6.2

BSOD при работе программы под .NET 4.6.2

Есть программа ("Электронной очереди") написанная на C# под фреймворкNET 4

182
Как задать значение ComboBox SelectedValue

Как задать значение ComboBox SelectedValue

Здравствуйте! Помогите пожалуйстаУ меня есть ComboBox в форме

265
Invalid argument. Culture is not supported.

Invalid argument. Culture is not supported.

Проект работал нормально, запушил его на Гит, пересобрал все refferences, перебилдилИ вот такая ошибка вылезла:

211