В чем разница между services.Configure () и services.AddOptions <T>(). Bind () при загрузке конфигурации в ASP.NET Core? - PullRequest
0 голосов
/ 19 апреля 2019

В моем проекте ASP.NET Core 2.2 WebApi я хочу загрузить конфигурацию из appsettings.json в строго типизированный объект.

В appsettings.json есть следующий раздел конфигурации:

{
  "MySettings1": {
    "Name": "John Smith",
    "Age": "25",
  }
}

который я хочу загрузить в строго типизированный объект MySettings:

public class MySettings
{
    public string Name { get; set; }
    public int Age { get; set; }
}

Я могу сделать это в моем методе Startup.ConfigureServices() следующим образом:

services.Configure<MySettings>(configuration.GetSection("MySettings1"));

или следующим образом:

services.AddOptions<MySettings>().Bind(configuration.GetSection("MySettings1"));

В чем разница между этими двумя подходами?Оба они работают нормально, так как я могу получить правильный экземпляр IOptions<MySettings>, введенный в HomeController в обоих случаях.

Существуют ли какие-то конкретные сценарии, в которых я должен использовать один из них по сравнению с другим?(например, в будущем я, вероятно, захочу добавить некоторую проверку времени выполнения объекта MySettings, как только он будет заполнен из конфигурации, поэтому в этом случае я должен предпочесть один подход другому?)

1 Ответ

1 голос
/ 19 апреля 2019

Это было задано в выпуске Github в ноябре 2018 года. Вопрос: AddOptions () и Multiple Configure (…) . Оба метода выполняют одну и ту же работу, но AddOptions появился позже и допускает больше настроек.

Configure (Action configureOptions) и OptionsBuilder.Configure (Action configureOptions) в итоге будут выполнять одно и то же:

services.AddSingleton<IConfigureOptions<TOptions>>(
    new ConfigureNamedOptions<TOptions>(name, configureOptions));

И OptionsBuilder.Bind (IConfiguration config) будет фактически вызывать Configure (IConfiguration config) напрямую, поэтому они также эквивалентны.

Таким образом, оба API взаимозаменяемы. И вы можете ожидать, что службы. Настройте вызовы, чтобы продолжить работу. API строителя опций появился позже, чтобы обеспечить немного больший контроль с помощью различных служебных методов. Но это не замена для прямых сервисов. Настройте API.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...