Могу ли я получить типизированный объект Options из полного файла appsettings.json?

Из документации ASP.NET Core видно, что я могу привязать именованное подразделение конфигурации только к типизированному объекту, используя IConfiguration::Bind<T>() или IConfiguration::Get<T>().

Интересно, есть ли способ скопировать весь файл appsettings.json из корня в типизированный объект.

Это возможно?

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


person AxD    schedule 18.07.2020    source источник


Ответы (1)


IConfigurationRoot , представляющий корень конфигурации и включающий все разделы вашего appsettings.json, также является IConfiguration, чтобы вы могли использовать его там, где вы использовали бы IConfiguration для настройки.

Это означает, что вы можете вызвать Bind() в корне конфигурации, чтобы полностью привязать его к объекту, или что вы можете использовать файл services.Configure() для настройки типа параметров с полным корнем конфигурации:

services.Configure<AllOptions>(Configuration);

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

Во время привязки связующее будет пропускать значения, которые не могут быть привязаны к целевому объекту. Так что да, объект конфигурации может включать больше значений, чем поддерживает целевой тип.

person poke    schedule 18.07.2020