C# 委托 - 它如何接受超出其定义的额外参数

问题描述 投票:0回答:1

在练习 Adam Freeman 的《Pro ASP.NET Core》一书时,我注意到以下

MapGet("route", RequestDelegate)
方法的用法:

app.MapGet("endpoint/function", 
    async (HttpContext context, IResponseFormatter formatter) => {
        await formatter.Format(context, "Endpoint Function: It is sunny in LA");
    });

IResponseFormatter
在DI中注册为单例,但我很困惑为什么使用以下源代码请求委托

public delegate Task RequestDelegate(HttpContext context);

接受超出其定义的额外参数。

这里我发现这是可能的,但是当我尝试使用额外参数创建委托和函数时 - 它不起作用。

所以在搜索过程中,我没有找到任何文档或文章,额外参数何时以及如何工作,为了正确使用它,请您提供任何文章或文档或任何解释?感谢您的关注。

c# asp.net-mvc .net-core lambda delegates
1个回答
0
投票

RequestDelegate 与 .NET 中的所有委托类型一样,不接受额外的参数。相反,代码会编译,因为 MapGet 扩展方法有两个重载

  1. MapGet(此 IEndpointRouteBuilder,字符串,委托)
  2. MapGet(此 IEndpointRouteBuilder,字符串,RequestDelegate)

其中一个重载接受 Delegate,它是所有委托类型的基类,它允许您传递具有任意参数的方法。

© www.soinside.com 2019 - 2024. All rights reserved.