例如,在配置应用程序时,通常会得到
app.AddConfiguration(options =>
{
options.DoThing();
options.ReadParameters(parameters);
options.UseOtherConfig(config =>
{
config.DoConfigThing(options.SomeValue);
}
}
我该如何在心理上分析这里发生的事情?
options
和config
对象来自哪里?它们是从指定的接口动态创建的吗(例如,如果它有签名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);
}
希望这是有道理的。