如何在ASP.NET Core RC2应用程序中手动重新加载IOptions

4

我有一个asp.net Core Rc2应用程序。为了存储系统设置,我使用配置了IOptions机制,如下所示:

services.AddOptions();
services.AddSingleton<IOptions<DocumentParameters>, DocumentParametersConfigureOptions>();

所有参数都在DocumentParametersConfigureOption类中从数据库加载。由于这种解决方案,所有系统设置都可以轻松注入到控制器/服务中,并且在服务器端缓存(仅在应用程序启动时加载)。

我还有一个页面,可以修改设置(在数据库中修改)。我想知道如何在用户点击保存时重新加载它们,而不必重新启动Web应用程序服务。


2
我能想到最简单的方法是将你的 AddSingleton 更改为 AddScoped。但这意味着每个请求都会访问一次数据库,这可能是要避免的。问题在于如何知道何时重新加载设置以响应更改。还要注意,当网页更改时,您不希望更改选项的单例实例,因为它可能会导致某些请求处于脏状态(其中一些设置在更改之前读取,但一些在之后读取)。 - Kiran
1
不要在启动时加载所有设置,而是考虑在第一次访问时进行延迟加载,然后缓存它们,这样后续的请求就不会去数据库了。当您修改设置时,只需清除缓存,然后下一个访问请求设置的请求将重新从数据库填充它们。值得研究一下IMemoryCache服务,可以通过在 Startup类中使用 services.AddMemoryCache() 注入。 - Brad
3个回答

3

内存缓存中使用。

加载时,将配置放入其中。在连接/解析结束时,从其中读取。当您通过UI更新它时,只需使缓存无效(即使用取消令牌,参见上面的链接)或手动将其覆盖现有值放回其中即可。


我想我会尝试一下这个内存缓存的东西。谢谢。 - Ellbar

0

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接