C# 如何在以后执行某些任务时更新asp.net core di容器

C# 如何在以后执行某些任务时更新asp.net core di容器,c#,asp.net,.net,asp.net-core,di-containers,C#,Asp.net,.net,Asp.net Core,Di Containers,我在di容器上保留了设置值,可以通过管理页面更改设置,但当我再次在服务集合中添加新设置值时,它会给我旧设置值。 如何在.net core上更新di容器值/服务。您需要插入IOptionsSnapshot,而不是直接插入强类型设置,其中T是您的设置类。这将导致它在重新加载配置时更新值。例如: public class MyController : Controller { private readonly IOptionsSnapshot<MySettings> _settin

我在di容器上保留了设置值,可以通过管理页面更改设置,但当我再次在服务集合中添加新设置值时,它会给我旧设置值。
如何在.net core上更新di容器值/服务。

您需要插入
IOptionsSnapshot
,而不是直接插入强类型设置,其中
T
是您的设置类。这将导致它在重新加载配置时更新值。例如:

public class MyController : Controller
{
    private readonly IOptionsSnapshot<MySettings> _settings;

    public MyController(IOptionsSnapshot<MySettings> settings)
    {
        _settings = settings;
    }

    ...
}
然后,您可以继续像以前一样将
MySettings
注入控制器

注意:
IOptionsSnapshot
在ASP.NET Core 1.1+中提供。无法在任何以前的版本中重新加载设置

services.Configure<MySettings>(Configuration.GetSection("MySettings"));
services.AddScoped(cfg => cfg.GetService<IOptionsSnapshot<MySettings>>().Value);