使用选项模式时,.net 如何刷新 json 中的值?

How does .net refresh the value from json when using Options pattern?

我正在开发 Web api 项目。

我在应用程序设置 json 文件中存储了一些键值。

我已经配置了选项模式,以便将 json 中的设置映射到一个对象。我读到选项模式默认具有单例范围。这意味着,在控制器的第一个请求中,注入的选项将使用 json.

中的值进行初始化

现在当我在json文件中修改一个值时,是否需要重新启动应用程序才能确保后续请求具有最新的设置值?或者有没有办法使选项具有范围,以便在每次请求时它都会从设置中获取最新值?

Options pattern in ASP.NET Core. How you read the configuration settings depends on the interface you use. This is described in the section with the unintuitive title Options interfaces 的文档对此进行了解释。我怀疑如果有人还不知道 IOptionsMonitor.

之类的话,有人会想去那一节吗

如该部分所述:

  • IOptions<> 确实是一个单例,在启动时加载值并且显示任何更改。
  • IOptionsMonitor 将在每次发生更改时发出通知,并允许您检索最新值。这意味着您可以在同一操作中轻松读取同一设置的两个不同值。

想象一下,在费用或佣金设置发生变化时尝试计算价格。这可能很烦人。

  • IOptionsSnapshot<> 是范围内的,将在范围启动时加载设置,并且 不会 在范围内更改,即使基础设置发生更改。如果您的选项对象有费用 属性,即使实际设置发生变化,费用也会保持不变。

您可以通过在控制器、BackgroundService 或其他 DI 服务中使用适当的接口来指定您希望如何检索值 class,例如:

class MyController:ControllerBase
{

    IOptionsSnapshot<Fees> _fees;

    public MyController(IOptionsSnapshot<Fees> feeOptions)
    {
        _fees=feeOptions'
    }
    ...
}

Use IOptionsSnapshot to read updated data 部分提供了更多示例