#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);
}
Надеюсь, это имеет смысл.