нет необходимости перекомпилировать при изменении конфигурации в ASP.NET Core - PullRequest
0 голосов
/ 02 апреля 2019

Я новичок в ASP.NET Core, я читал книгу, в которой написано:

В ASP.NET Core вы, наконец, получаете возможность редактировать файл и автоматически обновлять конфигурацию вашего приложения. без перекомпиляции или перезапуска.

и это также говорит о том, что при использовании строгой типизации с интерфейсом IOptions:

Регистрирует интерфейс IOptions в контейнере DI как одноэлементный объект с конечным связанным объектом POCO в свойстве Value.

Итак, вот мой вопрос, если реализация IOptions одноэлементная, это означает, что приложение будет постоянно получать один и тот же экземпляр службы. Если это так, когда файлы конфигурации меняются, как приложению не нужно перекомпилировать, чтобы отразить последние изменения? (если IOptions одноэлементный, объект POCO тоже всегда один и тот же)

1 Ответ

0 голосов
/ 10 апреля 2019

Если вы используете интерфейс 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
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...