Причина, по которой это происходит, заключается в том, что метод Configure возвращает действие, которое просто означает МЕТОД, который принимает IApplicationBuilder в качестве параметра и возвращает void.
Действие означает метод, который возвращает void.
Fun c означает метод, который возвращает что-либо.
Action и Fun c являются оберткой для «делегатов», которые являются просто «указателями» на методы.
Делегаты - это способ сохранения метода в переменной. Создать ссылку на метод, который можно передавать и вызывать в других местах.
Другими словами, они являются синтаксическим сахаром (более или менее) для использования делегатов для хранения ссылок на методы.
Вы можете, например, сделать это:
public Action<IApplicationBuilder> Configure(Action<IApplicationBuilder> next)
{
var builder = new ApplicationBuilder(_serviceProvider);
builder.UseMiddleware<PrincipalInjectionMiddleware>();
next(builder);
return next;//notice I am returning the ACTION not the return of the action
}
Позвольте мне привести более четкий пример:
public Action<IApplicationBuilder> Configure()
{
BuildAction(new ApplicationBuilder(_serviceProvider));//call the method
return BuildAction;//return the actual method name... NOT a method call
}
//this method is being returned as a reference in the Configure method...
private void BuildAction(IApplicationBuilder builder)
{
builder.UseMiddleware<PrincipalInjectionMiddleware>();
}
Смотрите в предыдущем примере, я возвращаю АКТУАЛЬНЫЙ метод ... НЕ вызов метода.