我是ASP.NET Core的初学者,我正在读一本书,上面写着:
在ASP.NET Core中,您终于可以编辑文件并自动更新应用程序的配置, 无需重新编译或重新启动。
并且它还说,在IOptions接口中使用强类型设置时:
将IOptions接口作为一个单例注册到DI容器中,并将最终绑定的POCO对象置于Value属性中。
所以这是我的问题,如果IOptions的实现是单例的,这意味着该应用程序将始终获得相同的服务实例。如果是这样,当配置文件更改时,该应用程序如何无需重新编译以反映最新更改? (如果IOptions是singleton,则POCO对象也总是相同的)
答案 0 :(得分:0)
如果使用IOptions<T>
界面,则Value
属性将始终返回配置期间设置的相同值。为了在每次更改文件时获取更新的值,您应该插入IOptionsMonitor<T>
或IOptionsSnapshot<T>
接口。
Startup.cs
services.Configure<SomeOptions>(Configuration.GetSection("ConfigSection"));
TestController.cs (带有IOptions
)
public class TestController : Controller
{
private readonly IOptions<SomeOptions> _options;
public TestController(IOptions<SomeOptions> options)
{
_options = options;
}
[HttpGet]
public async Task<IActionResult> GetConfig()
{
return Json(_options.Value); //returns same value every time
}
}
TestController.cs (带有IOptionsMonitor
)
public class TestController : Controller
{
private readonly IOptionsMonitor<SomeOptions> _options;
public TestController(IOptionsMonitor<SomeOptions> options)
{
_options = options;
}
[HttpGet]
public async Task<IActionResult> GetConfig()
{
return Json(_options.CurrentValue); //returns recalculated value
}
}