Здравствуйте, Jericho113, Вы писали:
J>Хотелось бы подключить просто этот провайдер и использовать его т.е. для разработчика это еще один провайдер вокруг AddJsonFile("appsettings.json")
Можно вместо `AddJsonFile` написать свой
"Custom Configuration Provider", которому будет передавать имя файла, провайдер будет парсить файл как json, и как-то его обрабатывать.
Всем привет,
Возник вот такой вопрос...
Есть хранилище секретов (кастомное)
Есть .net core api с своим набором appsettings{dev/qa/prod}.json конфигов...
В appsettings.json конфигурация хранится как то так
StorageSettings:{
Login:"lorem_ipsum",
Password: "/my/sectet/key/to/external/service"
}
BrokerSettings:{
Host:"broker>host",
Password: "broker>password"
}
Когда конфигурация подгружается и окончательно создается то руками в коде выполняется проход по всем ключам "/my/sectet/key/to/external/service"
и выполняется вызов внешнего сервиса а потом вместо таких ключей подставляются значения секретов из ответа сервиса...
Такой код сейчас разрастается по множеству реп и мне это очень не нравится т.к при дальнейшей поддержке будет вызывать большие неудобства..
Есть ли стандартный способ как то вклиниться в загрузку конфигурации в .net core и написать свой провайдер который бы делал это автоматически ?
Хотелось бы подключить просто этот провайдер и использовать его т.е. для разработчика это еще один провайдер вокруг AddJsonFile("appsettings.json")
Если есть какие то варианты — накидайте в сообщениях.
Заранее благодарен.
Здравствуйте, #John, Вы писали:
J>Здравствуйте, Jericho113, Вы писали:
J>Можно вместо `AddJsonFile` написать свой "Custom Configuration Provider", которому будет передавать имя файла, провайдер будет парсить файл как json, и как-то его обрабатывать.
Да я думал в этом направлении но это подразумевает вычитку и парсинг JSON конфигурации т.к. она может быть вот в таком виде
// appsettings.development.json
"MyStorageSettings":{
"KeepAliveInerval":"30",
"User":"/dev/storage/secret/name", // это надо распарсить и потом вызвать внешний сервис, получить результат и его подставить вместо значения
"Password":"/dev/storage/secret/password", // это надо распарсить и потом вызвать внешний сервис, получить результат и его подставить вместо значения
"IdentifyAs":"lorem ipsum"
}
Т.е. нужно что-либо поверх JsonConfigurationSource но прозрачно для вызывающего когда.
В идеале как то так
var cfgBuiler = new ConfigurationBuilder();
cfgBuilder.AddCustomSecretsFromSettingsFile("appsettings.development.json");
var cfg = cfgBuilder.Build(); // вот здесь должна произойти "магия" с подменой значений
cfg.GetValue<string>("MyStorageSettings:Password"); //здесь уже вычитать пароль как plain text