Как работает лямбда-синтаксис конфигураций ASP.NET конфигурации работают?

#c# #asp.net-core

#c# #asp.net-ядро

Вопрос:

Например, при настройке приложения вы обычно получаете

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

Как мне мысленно проанализировать, что здесь происходит?

Откуда берутся options config объекты and ? Создаются ли они «на лету» из указанных интерфейсов (например, если у него есть подпись app.AddConfiguration(IOptions options) ? Как второе вложение извлекает значение, если ничего не установлено? Должен ли я предполагать, что это задается ASP.NET где-то во время выполнения, и я не должен «заботиться»?

Ответ №1:

Вы передадите функцию AddConfiguration , которая выглядит следующим образом:

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

а затем назовите это как

 app.AddConfiguration(HandleAddConfiguration);
  

Этот синтаксис может сделать вещи немного более понятными. Используемый вами синтаксис называется лямбда-выражениями.

Эта лямбда-функция будет вызываться AddConfiguration функцией, подобной этой (упрощенный пример):

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

Надеюсь, это имеет смысл.