Я пытаюсь редактировать appsettings.json
во время выполнения. Я нашел отличное решение, как обновить этот файл:
{ ссылка }
Я сделал все в соответствии с ответом выше:
1) Добавлено MySettings
в контейнер DI (MySettings
добавляются через AddTransient
) services.ConfigureWritable (Configuration.GetSection (nameof (MySettings))));
2) Внедрение в конструктор
private readonly IWritableOptions<MySettings> _cfg;
public MyController(IWritableOptions<MySettings> cfg)
{
_cfg = cfg;
}
Затем Я использую его в своем Create
действии контроллера.
public ActionResult Create(string value)
{
//Some specific code...
MyCustomObj myObj = new MyCustomObj(value);
//Update appsettings
_cfg.Update(opt =>
{
opt.MyCollection.Add(myObj);
});
//Some specific code...
return RedirectToAction(nameof(Overview));
}
Файл конфигурации обновлен (обновленный объект MySettings
сериализуется в файл), но после перенаправления на Overview
у меня есть та же коллекция без вновь созданного объект (конфигурация без обновленной коллекции вводится в конструктор контроллера). Я должен снова обновить страницу sh, а затем я вижу обновленную конфигурацию (обновлено MySettings
вводится).
Я подозревал, что это может быть ошибка интерфейса IOptionsSnapshot , потому что он это сфера обслуживания. Но служба с областью действия должна быть активна только в течение времени существования запроса, а перенаправление - это новый запрос, или я ошибаюсь?
Такая же ситуация возникает, когда я пытаюсь удалить какой-либо объект из моей коллекции. Страница со всеми элементами (включая удаленный) отображается. Все нормально, когда я перефразирую sh страницу.