Почему промежуточное ПО в ASP.NET Core требует определенной семантики, но не интерфейса?
Как известно, IApplicationBuilder метода Configure (class Startup) в ASP.NET Core требует специальной семантики (иметь метод "Invoke" с входным параметром типа HttpContext и Task как возвращаемое значение). Но почему он не реализован как интерфейс? Я могу написать что-то вроде этого:
public class FakeMiddleware
{
}
и зарегистрируйте его:
app.UseMiddleware<FakeMiddleware>();
и мы получим ошибку времени выполнения. Конечно, это тривиальная вещь и ее легко найти и исправить, но она реализована так грубо, без интерфейса?
Ответы
Ответ 1
Метод Invoke является гибким, и вы можете запросить дополнительные параметры. ASP.NET добавит дополнительные параметры, используя конфигурацию службы приложений.
public async Task Invoke(HttpContext ctx,
IHostingEnvironment host,
ISomethingElse service)
{
// ...
}
Определения интерфейса С# не могут обеспечить эту гибкость хорошим способом.