Преобразование IConfigurationSection в IOptions - PullRequest
0 голосов
/ 06 ноября 2018

Шаблон параметров позволил мне создать объекты параметров, содержащие значения из конфигурации, как описано здесь: https://docs.microsoft.com/en-us/aspnet/core/fundamentals/configuration/options?view=aspnetcore-2.1

Мне нужны значения для одного объекта опции в реализации IDesignTimeDbContextFactory, которые будут использоваться EF при создании моделей. (Значения в этом разделе конфигурации будут использоваться для заполнения данных, поэтому я добавил IOptions в конструктор контекста БД.)

Поскольку у меня нет доступа к IServiceCollection (так как это время разработки - как при запуске «добавления dotnet ef migrations»), мне нужно иметь другой способ преобразовать IConfigurationSection (представляющий интересующий меня раздел) в мои пользовательские параметры класс.

Могу ли я узнать, как я могу сделать это без внедрения зависимостей?

Ответы [ 2 ]

0 голосов
/ 06 ноября 2018

Вы можете использовать метод расширения Bind(Configuration, object) для выполнения ручного связывания любого object. Вот пример:

var myCustomOptions = new MyCustomOptions();
myConfigurationSection.Bind(myCustomOptions);

// Use myCustomOptions directly.

Чтобы обернуть это IOptions<T>, вы можете использовать Options.Create, например:

IOptions<MyCustomOptions> myOptions = Options.Create(myCustomOptions);
0 голосов
/ 06 ноября 2018

Я думаю, вам нужно Bind метод:

var config = new ConfigurationBuilder()...Build();
var myOptions = new MyOptions();
config.GetSection("MyOptions").Bind(myOptions);
...