В моем приложении .net core mvc (2.2) у меня есть конфигурация, настроенная из базы данных. Как перезагрузить конфигурацию с контроллера, например, после изменения некоторых значений в базе данных? Я пробовал что-то подобное, но это не работает:
MyConfiguration.cs:
public class MyConfiguration
{
public string SmtpServer {get;set;}
}
Startup.cs:
public class Startup
{
public IConfiguration Configuration { get; }
public void ConfigureServices(IServiceCollection services)
{
services.Configure<MyConfiguration>(options => {
options.SmtpServer = Configuration["SmtpServer"];
});
// ...
services.AddSingleton<IConfiguration>(Configuration);
}
}
Program.cs:
public class Program
{
public static void Main(string[] args)
{
CreateWebHostBuilder(args).Build().Run();
}
public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
WebHost
.CreateDefaultBuilder(args)
.ConfigureAppConfiguration((hostingContext, config) =>
{
config.SetBasePath(Directory.GetCurrentDirectory());
config.AddJsonFile("appsettings.json", optional: false, reloadOnChange: true);
config.AddEFConfiguration(options => options.UseNpgsql("connection_string"));
config.AddCommandLine(args);
})
.UseStartup<Startup>();
}
Контроллер:
public class TestController : ControllerBase
{
private readonly IConfigurationRoot _configurationRoot;
public TestController(IConfiguration configurationRoot)
{
_configurationRoot = (IConfigurationRoot)configurationRoot;
}
[HttpGet]
public async Task<IActionResult> Index()
{
// some logic for updating values in the database
// Doesn't work
_configurationRoot.Reload();
return Ok();
}
}