ASP.NET配置的lambda语法是如何工作的



例如,在配置应用程序时,通常会得到

app.AddConfiguration(options => 
{
options.DoThing();
options.ReadParameters(parameters);
options.UseOtherConfig(config =>
{
config.DoConfigThing(options.SomeValue);
}
}

我该如何在心理上分析这里发生的事情?

optionsconfig对象来自哪里?它们是从指定的接口动态创建的吗(例如,如果它有签名app.AddConfiguration(IOptions options)?如果没有设置任何值,第二个嵌套如何检索值?我是否应该假设这是由ASP.NET在运行时在某个地方设置的,而我不应该"在意"?

您将向AddConfiguration传递一个函数,如下所示:

public void HandleAddConfiguration(IConfiguration options) {
options.DoThing();
options.ReadParameters(parameters);
options.UseOtherConfig(config =>
{
config.DoConfigThing(options.SomeValue);
}
}

然后称之为

app.AddConfiguration(HandleAddConfiguration);

这个语法可能会让事情变得更清楚一些。您使用的语法称为lambda表达式。

这个lambda函数将由AddConfiguration函数调用,如下所示(简化示例(:

public void AddConfiguration(Action<IConfiguration> configAction) {
IConfiguration config = new Configuration();
configAction(config);
}

希望这是有道理的。

最新更新