大佬教程收集整理的这篇文章主要介绍了.NET5修改配置不重启自动生效,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
.NET Core,.NET5默认配置都是只加载一次,修改配置时都需要重启才能生效,如何能修改即时生效呢,下面来演示一遍。
在Program.cs的CreateHostBuilder()处增加加载配置文件的时候,reloadOnChange:true。
这样配置文件修改的时候,程序就会监听到文件发生变化,自动重新加载了。
public static IHostBuilder CreateHostBuilder(String[] args) => Host.CreateDefaultBuilder(args) .ConfigureAppConfiguration((context, config) => { config.AddJsonFile("appsetTings.json", optional: true, reloadOnChange: true); }) .ConfigureWebHostDefaults(webBuilder => { webBuilder.UseStartup<Startup>(); });
public class HomeController : Controller { private readonly ILogger<HomeController> _logger; private readonly IConfiguration _configuration; public HomeController(ILogger<HomeController> logger, IConfiguration configuration) { _logger = logger; _configuration = configuration; } public IActionResult Index() { String Name = _configuration["TestSetTing"]; String Name2 = _configuration["AppOptions:UserName"]; ViewBag.Name = Name; ViewBag.Name2 = Name2; return View(); } }
界面显示:
把配置文件修改为:
刷新页面,已经发生变化:
新建AppOptions.cs类
/// <sumMary> /// 配置文件 /// </sumMary> public class AppOptions { public String UserName { get; set; } }
在Startup.cs处把配置加到Options
public void Configureservices(IserviceCollection services) { services.AddControllersWithViews(); services.Configure<AppOptions>(Configuration.GetSection("AppOptions")); }
使用:
public class HomeController : Controller { private readonly ILogger<HomeController> _logger; private readonly IConfiguration _configuration; private IOptionsMonitor<AppOptions> _options; public HomeController(ILogger<HomeController> logger, IConfiguration configuration, IOptionsMonitor<AppOptions> appOptions) { _logger = logger; _configuration = configuration; _options = appOptions; } public IActionResult Index() { String Name = _configuration["TestSetTing"]; String Name2 = _options.CurrentValue.UserName; ViewBag.Name = Name; ViewBag.Name2 = Name2; return View(); } }
IOptions有三种方式
//IOptions<T> //站点启动后,获取到的值永远不变 //IOptionsMonitor<T> //站点启动后,如果配置文件有变化会发布事件 (加载配置时,reloadOnChange:true 必须为true) //IOptionsSnapshot<T> //站点启动后,每次获取到的值都是配置文件里的最新值 (加载配置时,reloadOnChange:true 必须为true)
注意:
IOptionsMonitor<T> 和 IOptionsSnapshot<T> 的最大区别是前者可以被其他的Singleton services使用而后者不可以, 因为前者被注册为Singleton 而后者是被注册为Scoped,也就是说文件被修改了前者会立即Reload,而后者是在每个请求才被Reload。
public class HomeController : Controller { private readonly ILogger<HomeController> _logger; private Userservice _userservice; public HomeController(ILogger<HomeController> logger, Userservice userservicE) { _userservice = userservice; } public IActionResult Index() { String Name2 = _userservice.GetName(); ViewBag.Name2 = Name2; return View(); } }
public class Userservice { private IOptionsMonitor<AppOptions> _options; public Userservice(IOptionsMonitor<AppOptions> appOptions) { _options = appOptions; } public String GetName() { var Name = _options.CurrentValue.UserName; return Name; } }
public void Configureservices(IserviceCollection services) { services.AddControllersWithViews(); services.Configure<AppOptions>(Configuration.GetSection("AppOptions")); services.AddSingleton<Userservice>(); }
上面的Userservice是单例注入的,通过IOptionsMonitor<T>的方式是可以实现配置实时刷新的,而IOptionsSnapshot<T>启动就会报错。
增加多一个db配置文件
修改Program.cs处CreateHostBuilder(),也是加载时加上reloadOnChange:true 就可以了。
public static IHostBuilder CreateHostBuilder(String[] args) => Host.CreateDefaultBuilder(args) .ConfigureAppConfiguration((context, config) => { config.AddJsonFile("appsetTings.json", optional: true, reloadOnChange: true); config.AddJsonFile("Configs/dbsetTing.json", optional: true, reloadOnChange: true); }) .ConfigureWebHostDefaults(webBuilder => { webBuilder.UseStartup<Startup>(); });
使用也是一样的:
public class HomeController : Controller { private readonly ILogger<HomeController> _logger; private readonly IConfiguration _configuration; private AppOptions _options; public HomeController(ILogger<HomeController> logger, IConfiguration configuration, IOptionsMonitor<AppOptions> appOptions) { _logger = logger; _configuration = configuration; _options = appOptions.CurrentValue; } public IActionResult Index() { String Name = _configuration["TestSetTing"]; String Name2 = _configuration["db:connection1"]; ViewBag.Name = Name; ViewBag.Name2 = Name2; return View(); } }
以上是大佬教程为你收集整理的.NET5修改配置不重启自动生效全部内容,希望文章能够帮你解决.NET5修改配置不重启自动生效所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。